在C FAQ站点中提到 – “通过值作为基类对象传递时,较大的派生类对象被分割”,切片是什么意思?任何样品要展示?
@H_301_2@http://www.parashift.com/c++-faq-lite/value-vs-ref-semantics.html#faq-31.8
@H_301_2@我正在使用VSTS 2008 native C作为我的开发环境.
解决方法
报价
this lecture:
Slicing
@H_301_2@Suppose that class D is derived from
class C. We can think of D as class C
with some extra data and methods. In
terms of data,D has all the data that
C has,and possible more. In terms of
methods,D cannot hide any methods of
C,and may have additional methods. In
terms of existing methods of C,the
only thing that D can do is to
override them with its own versions. @H_301_2@If x is an object of class D,then we
can slice x with respect to C,by
throwing away all of the extensions
that made x a D,and keeping only the
C part. The result of the slicing is
always an object of class C. @H_301_2@07001 @H_301_2@Design Principle: Slicing an object
with respect to a parent class C
should still produce a well-formed
object of class C. @H_301_2@Usage Warning: Even though D is-a C,
you must be careful. If you have a
argument type that is a C and you
supply a D it will be sliced if you
are doing call by value,pointer,or
reference. See the example below. @H_301_2@Note on virtual functions. Their
signatures are used to identify which
one to execute. @H_301_2@Watch out for the sliced = operator,it can make the lhs inconsistent. Also,the operator= is never virtual,it wouldn’t make sense. For example,suppose classes A,B are both subclasses of class C. Just because an A is a C,and a B is a C,it doesn’t mean you can assign a B object to an A object. Without run-time type information you cannot make a safe assignment.