切片意味着什么?

前端之家收集整理的这篇文章主要介绍了切片意味着什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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.

猜你在找的C&C++相关文章