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;
相关推荐
树獭叔叔几秒前
FFN 激活函数深度解析:从 ReLU 到 SwiGLU 的演进之路
算法·aigc·openai
努力学习的小廉7 分钟前
Python基础——搭建 Python 环境
开发语言·python
luanma1509808 分钟前
Laravel 4.x:现代PHP框架的奠基之作
开发语言·php·laravel
啊我不会诶15 分钟前
最小生成树
c++·笔记·学习·算法
清水白石00817 分钟前
Python 编程全景解析:四大核心容器的性能较量、语义之美与高阶实战
开发语言·数据库·python
淀粉肠kk17 分钟前
【C++】C++11 Lambda表达式
开发语言·c++
南境十里·墨染春水18 分钟前
CMake核心用法(贴合C++编译场景)
开发语言·c++
Rust语言中文社区24 分钟前
【Rust日报】 Danube Messaging - 云原生消息平台
开发语言·后端·rust
kaikaile199527 分钟前
微电网两阶段鲁棒优化经济调度MATLAB实现
开发语言·matlab
liuyao_xianhui29 分钟前
优选算法_栈_删除字符中的所有相邻重复项_C++
开发语言·数据结构·c++·python·算法·leetcode·链表