切除问题-嵌入式实时操作系统uc/os-ii

时间:2021-06-24 01:23:58
【文件属性】:
文件名称:切除问题-嵌入式实时操作系统uc/os-ii
文件大小:6.14MB
文件格式:PDF
更新时间:2021-06-24 01:23:58
C++ 10.4 切除问题 如果程序员像下面这样做,结果将如何呢? Derived objDerived; Base objectBase = objDerived; 如果程序员像下面这样做,结果又将如何呢? void UseBase(Base input); ... Derived objDerived; UseBase(objDerived); // copy of objDerived will be sliced and sent 它们都将 Derived 对象复制给 Base 对象,一个是通过显式地复制,另一个是通过传递参数。在这 些情形下,编译器将只复制 objDerived 的 Base 部分,即不是整个对象。换句话说,Derived 的数据成 员包含的信息将丢失。这种无意间裁减数据,导致 Derived 变成 Base 的行为称为切除(slicing)。 要避免切除问题,不要按值传递参数,而应以指向基类的指针或 const 引用的方式传递。 10.5 多继承 本章前面说过,在有些情况下,采用多继承是合适的,如对鸭嘴兽来说。鸭嘴兽具备哺乳动物、 鸟类和爬行动物的特征。为应对这样的情形,C++允许继承多个基类: class Derived: access-specifier Base1, access-specifier Base2 { // class members }; 图 10.3 是 Platypus(鸭嘴兽)的类图,这与 Tuna 和 Carp 的类图(图 10.2)完全不同。 图 10.3 Platypus 类与 Mammal、Reptile 和 Bird 类之间的关系 因此,表示 Platypus 类的 C++代码如下:

网友评论