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 大型程序工具) 多重继承之构造函数、析构函数相关推荐

  1. C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

    1. 3种方法 using 声明 命名空间的别名( namespace alias) using 指示( using directive) 1.1 命名空间的别名 namespace cplusplu ...

  2. C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

    1. using 声明或 using 指示能将某些函数添加到候选函数集 2. 对于接受类类型实参的函数来说, 其名字查找将在实参类所属的命名空间中进行.在这些命名空间中所有与被调用函数同名的函数都将被 ...

  3. C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域

    1. 命名空间内部名字的查找规则 由内向外依次查找每个外层作用域. 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止. 只有位于开放的块中且在使用点之前声明的名字才被 ...

  4. C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamed namespace

    1. 定义 关键字 namespace 后紧跟花括号括起来的一系列声明语句 1.1 生命周期 未命名的命名空间中定义的变量拥有静态生命周期: 它们在第一次使用前创建, 并且直到程序结束才销毁 未命名的 ...

  5. C++ Primer 5th笔记(chap 18 大型程序工具)内联命名空间 (inline namespace)

    1. inline必须出现在命名空间第一次出现的地方 inline namespace FifthEd {//... }//后续再打开命名空间的时候可以写inline也可以不写 namespace F ...

  6. C++ Primer 5th笔记(chap 18 大型程序工具)命名空间

    1. 问题:命名空间污染 namespace pollution 多个库将名字放置在全局命名空间 1.1 一般人的解决方法 起长名字 eg. class cplusplus_primer_Query ...

  7. C++ Primer 5th笔记(chap 18 大型程序工具)noexcept

    1. 通过提供 noexcept 说明 ( noexcept specification ) 指定某个函数不会抛出异常. 其形式是关键字 noexcept 紧跟在函数的参数列表后面 {// 紧跟在函数 ...

  8. C++ Primer 5th笔记(chap 18 大型程序工具)异常处理

    1. 异常处理 ( exception handling) 允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理. 异常使得我们能够将问题的检测与解决过程分离开来. 程序的一部分负 ...

  9. C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承

    1. 继承体系中的每个类都可能在某个时刻成为" 最低层的派生类". 只要我们能创建虚基类的派生类对象, 该派生类的构造函数就必须初始化它的虚基类. Bear::Bear (std: ...

最新文章

  1. 北京理工大学计算机学院张教授,北京理工大学嵩天教授做客信息学院
  2. 家属楼如何设置使用免费wifi
  3. Spring3.1+SpringMVC3.1+JPA2.0
  4. 5.1.5 IO核心子系统
  5. Debug Docker: Error response from daemon: dial unix docker.raw.sock: connect: connection refused
  6. Python自学真的可以学好嘛?
  7. 架构之旅~一个操作的返回要有一个标准,看我的公用消息类
  8. 计算机控制技术证书可以考吗,计算机控制技术专业可考哪些资格证书
  9. 沙盘推演具体包括哪些内容
  10. 【软件】如何批量手机号码归属地查询并且快速分类?批量号码归属地告诉查询分类系统怎么使用?全部教会你
  11. 匈牙利算法【匹配问题】
  12. 创业公司一年工作总结
  13. php function overridden,php在函数外声明global变量有什么用?
  14. 4种 LBS “附近的人” 实现方案,人人都能看的懂
  15. 学会使用 GitHub 之 GtHub 与 ATOM 联姻
  16. 一章——Web网站服务(一)(应用—linux高级管理)
  17. http://www.cnblogs.com/tornadomeet/archive/2012/05/24/2515980.html
  18. 多消费者(多线程)对MNS的使用
  19. 31-35.玩转Linux操作系统
  20. X-Forwarded-For详解、如何获取到客户端IP

热门文章

  1. 多线程:中断(interrupt、interrupted、executor)
  2. 普通进程的守护进程化
  3. 系统进程间的同步机制
  4. Java 向上类型转换与向下类型转换的理解【复习】
  5. hadoop 运行java程序_Hadoop java 程序运行
  6. ps cs6 磨皮插件_磨皮就是几秒的事!2020顶级PS一件磨皮插件DR5、Portaiture分享
  7. r语言 断轴 画图_R 绘图 – 函数曲线图 | 菜鸟教程
  8. 云计算灾备:灾备通识
  9. 数据中心液体冷却技术的“机架经济学”
  10. 4个在2020年持续发展的数据中心冷却趋势