C++ //练习 18.29 已知有如下所示的类继承关系:

C++ Primer(第5版) 练习 18.29

练习 18.29 已知有如下所示的类继承关系:

cpp 复制代码
class Class { ... };
class Base: public Class { ... };
class D1: virtual public Base { ... };
class D2: virtual public Base { ... };
class MI: public D1, public D2 { ... };
class Final: public MI, public Class { ... };
( a ) 当作用一个Final对象时,构造函数和析构函数的执行次序分别是什么?
( b ) 在一个Final对象中有几个Base部分?几个Class部分?
( c ) 下面的哪些赋值运算符将造成编译错误?
Base *pb; Class *pc; Mi *pmi; D2 *pd2;
( a ) pb = new Class;		( b ) pc = new Final;
( c ) pmi = pb;				( d ) pd2 = pmi;
环境:Linux Ubuntu(云服务器)
工具:vim
解释
cpp 复制代码
class Class { ... };
class Base: public Class { ... };
class D1: virtual public Base { ... };
class D2: virtual public Base { ... };
class MI: public D1, public D2 { ... };
class Final: public MI, public Class { ... };

( a ) 当作用一个Final对象时,构造函数和析构函数的执行次序分别是什么?
类构造函数:由于 Base 继承自 Class,并且 D1 和 D2 都虚继承自 Base,因此首先构造 Class。
Base 构造函数:由于 D1 和 D2 虚继承自 Base,因此只构造一个 Base 对象,并且构造过程在 Class 构造函数之后。
D1 构造函数:初始化基类后,构造 D1。
D2 构造函数:然后构造 D2。
MI 构造函数:在 D1 和 D2 之后,调用 MI 构造函数。
类构造函数(再次):由于 Final 也直接继承自 Class,因此对于 Final 中的 Class 部分,再次调用此构造函数。
Final 构造函数:最后,执行 Final 构造函数。

( b ) 在一个Final对象中有几个Base部分?几个Class部分?
Base 部分的数量:
Final 对象中有一个 Base 部分。这是因为 D1 和 D2 实际上继承了 Base,这导致 MI 中存在一个共享的 Base 子对象,因此 Final 中也是如此。

Class 部分的数量:
Final 对象中有两个 Class 部分:
Base 继承的 Class 部分,由 D1 和 D2 通过 Base 共享。
Final 直接继承的附加 Class 部分。

( c ) 下面的哪些赋值运算符将造成编译错误?
Base *pb; Class *pc; Mi *pmi; D2 *pd2;
//错误
( a ) pb = new Class;
//正确
( b ) pc = new Final;
//错误
( c ) pmi = pb;
//正确	
( d ) pd2 = pmi;
相关推荐
触底反弹7 分钟前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法
aaaameliaaa31 分钟前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法
m0_5474866637 分钟前
《模式识别:使用MATLAB分析与实现》全套PPT课件
开发语言·matlab·模式识别
Jerry38 分钟前
LeetCode 977. 有序数组的平方
算法
Tim_1038 分钟前
【C++】009、extern关键字
java·开发语言
C路在脚下1 小时前
HSMS 连接总失败?排查这 5 个配置点
c++·嵌入式硬件
Turbo正则1 小时前
群论学习入门 | 群论与李群的基本概念
人工智能·学习·算法·抽象代数
郝学胜_神的一滴1 小时前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
c++·qt
sugar__salt1 小时前
手撕字符串算法:反转、回文、验证回文 Ⅱ 完整拆解
javascript·算法·面试·职场和发展
夜雪一千1 小时前
Python 使用OpenAI调用Qwen3.6-27B-ms模型|完整参数详解
开发语言·python