C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数析构函数
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数析构函数相关的知识,希望对你有一定的参考价值。
1. 继承的构造函数与多重继承
如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误
struct Basel
Basel () = default;
Basel (const std::strings);
Basel (std::shared_ptr<int>);
;
struct Base2
Base2() = default;
Base2(const std::strings);
Base2(int) ;
;
// 错误: D1试图从两个基类中都继承 Dl::D1(const strings)
struct Dl: public Basel, public Base2
using Basel::Base1;// 从Base1继承构造函数
using Base2::Base2;// 从 Base2 继承构造函数
如果一个类从它的多个基类中继承了相同的构造函数, 则这个类必须为该构造函数定义它
自己的版本:
struct D2: public Base1, public Base2
using Base1::Base1;// 从 Base1继承构造函数
using Base2::Base2;/ / 从 Base2 继承构造函数
//D2 必须自定义一个接受 string的构造函数
D2(const string &s): Base1(s), Base2(s)
D2() = default; // 一旦 D2 定义了它自己的构造函数, 则必须出现
;
2. 析构函数
派生类的成员及基类都是自动销毁的。
- 合成的析构函数体为空。
- 析构函数的调用顺序正好与构造函数相反, 在我们的例子中, 析构函数的调用顺序是
'Panda、 'Endangered、 'Bear和~ZooAnimal
3. 派生类的拷贝与移动操作
派生类如果定义了自己的拷贝/赋值构造函数和赋值运算符, 则必须在完整的对象上执行拷贝、 移动或赋值操作。
只有当派生类使用的是合成版本的拷贝、 移动或赋值成员时, 才会自动对其基类部分执行这些操作。 在合成的拷贝控制成员中, 每个基类分别使用自己的对应成员隐式地完成构造、 陚值或销毁等工作。
eg.
step1. 调用 Bear 的拷贝构造函数, 后者又在执行自己的拷贝任务之前先调用 ZooAnimal 的拷贝构造函数。
step2. 调用 Endangered的拷贝构造函数来创建对象相应的部分
step3. Panda的拷贝构造函数
Panda ying_yang ("ying_yang" );
Panda ling_ling = ying_yang;//使用拷贝构造函数
以上是关于C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数析构函数的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 18 大型程序工具)noexcept
C++ Primer 5th笔记(chap 18 大型程序工具)异常处理
C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常
C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性