1. 继承的构造函数

1.1 C++11新标准中,派生类可以重用其直接基类定义的构造函数。

继承方式是提供一条注明了直接基类名的using声明语句。

class Bulk_quote : public Disc_quote
{public:using Disc_quote::Disc_quote;   // inherit Disc_quote's constructorsdouble net_price(std::size_t) const;
};<=>
derived(parms) : base(args) {}例如:
Bulk_quote(const std::string& book,double price,std::size_t qty,
double disc):Disc_quote(book,price,qty,disc){}

● 构造函数的using声明不会改变该函数的访问级别,不能指定explicit或constexpr属性。
● 派生类不能继承默认、拷贝和移动构造函数。如果派生类没有直接定义这些构造函数,则编译器会为其合成它们。

2. 继承的构造函数的特点

当一个基类构造函数含有默认实参时,这些默认值不会被继承。相反,派生类会获得多个继承的构造函数,其中每个构造函数分别省略掉一个含有默认值的形参。

eg. 基类有一个接受两个形参的构造函数,其中第二个形参含有默认实参,则派生类将获得两个构造函数,一个构造函数接受两个形参(没有默认实参),另一个只接受一个形参,它对应于基类中最左侧的没有默认值的那个形参。

大多数情况下派生类会继承基类的构造函数,则除两种情况:
● 派生类可以继承一部分构造函数,而为其他构造函数定义自己的版本,如果派生类定义的构造函数与基类的构造函数具有相同的参数列表,则该构造函数将不会被继承,定义在派生类中的构造函数将替换继承而来的构造函数。

● 默认、拷贝、移动构造函数不会被继承,这些构造函数按照正常规则被合成。如果一个类只含有继承的构造函数,则它将拥有一个合成的默认构造函数。

2.容器与继承

● 当我们使用容器存放继承体系中的对象时,通常必须采用间接存储的方式。
● 派生类对象直接赋值给积累对象,其中的派生类部分会被切掉。
● 在容器中放置(智能)指针而非对象。
● 对于C++面向对象的编程来说,一个悖论是我们无法直接使用对象进行面向对象编程。相反,我们必须使用指针和引用。因为指针会增加程序的复杂性,所以经常定义一些辅助的类来处理这些复杂的情况。

vector<shared_ptr<Quote>> basket;
basket.push_back(make_shared<Quote>("0-201-82470-1", 50));
basket.push_back(make_shared<Bulk_quote>("0-201-82470-1", 50, 10, 0.25));//此时basket存着shared_ptr,所以必须解引用basket.back()的返回值以获得运行net_price的对象
cout << basket.back()->net_price(15) << endl;

C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器相关推荐

  1. C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数

    1. 继承的构造函数与多重继承 如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误 struct Basel {Basel () = default;Basel (const ...

  2. Th3.15:继承的构造函数、多重继承、虚继承之详述

     本博客将记录:新经典课程知识点的第15节的笔记! 本小节的知识点分别是继承的构造函数.多重继承.虚继承. 今天总结的知识分为以下5个点: (1)继承的构造函数 (2)多重继承     (2.1)多重 ...

  3. C++ Primer 5th笔记(chap 15 OOP)继承中的类作用域

    1. 派生类的作用域 每个类定义自己的作用域,作用域内定义成员,当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中 ...

  4. C++ Primer 5th笔记(chap 15 OOP)访问控制与继承

    1. 用户和类的实现者 用户:指类的对象或实例. 类的实现者:包括类的成员. 2. private.public.protect成员 2.1派生类可以访问公有public成员,而不能访问私有priva ...

  5. C++ Primer 5th笔记(chap 15 OOP)继承之派生类

    1. 构造函数 每个类控制它自己的成员初始化过程:尽管派生类包含了从基类继承而来的成员,但是派生类不能直接初始化这些成员,而是需要使用基类的构造函数来初始化它们. 派生类对象的基类部分与派生类对象自己 ...

  6. C++ Primer 5th笔记(chap 15 OOP)继承概念

    1. 派生类可以访问其基类中的公有成员和受保护的成员. 一个派生类对象包含多个组成部分:含有派生类自定义的对象,继承自基类的对象. eg. 一个单继承的例子. //定义基类 class Quote{p ...

  7. C++ Primer 5th笔记(chap 15 OOP)继承之类型转换

    1. 派生类->基类(编译器隐式执行) 1.1 将基类的指针或引用绑定到派生类的对象上:当使用基类的引用或指针时,实际上我们并不清楚该引用或指针所绑定对象的真实类型.该对象可能是基类的对象,也可 ...

  8. C++ Primer 5th笔记(chap 15 OOP)构造函数和拷贝控制

    1. 虚析构函数 基类通常应该定义一个虚析构函数. class Quote {public:// virtual destructor needed if a base pointer pointin ...

  9. C++ Primer 5th笔记(chap 15 OOP)抽象基类

    1. 纯虚函数pure virtual 纯虚函数无需定义,通过在函数体的位置书写 =0 就可以将一个虚函数说明为纯虚函数. 其中 =0 只能出现在类内部的虚函数声明语句中. 可以为一个纯虚函数提供定义 ...

最新文章

  1. 特征工程(二)TfidfVectorizer
  2. 有趣的开源 AI 换脸工具:faceswap
  3. 组图:2000悉尼奥运会
  4. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
  5. Tomcat 比 nio 、aio性能更好的apr介绍
  6. vb mysql边记录边统计_VB与Access连接,检索、核对、处理数据
  7. echart饼图标签重叠_怎么让ECharts饼图的label标签不重叠?
  8. SAP License:ERP财务软件简介
  9. matlab2c使用c++实现matlab函数系列教程- polyint函数
  10. 【控制理论】预测控制分析
  11. H5+CSS3移动商城界面.七天从零实战课程-会员_登录
  12. 无线射频专题《IEEE 802.11协议讲解4@可调参数,性能与兼容性考虑》
  13. Oracle --- 表空间
  14. 【Leetcode 刷题题解】python语言+最优美解答+由易到难
  15. 7-6 分支结构——大小写字母判断 (15 分)
  16. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)
  17. html学习基础(一)
  18. 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒
  19. 新增一级菜单和子菜单
  20. openjudge 1.5.15 银行利息

热门文章

  1. html加上 extjs右键,extjs 处理HTML事件和自定义事件
  2. 数据中心供配电系统负荷计算实例分析
  3. 数据中心实现高效运维的秘诀
  4. Interview:算法岗位面试—10.30上午上海某信息公司(偏图算法)技术面试之单链表反转、给定整型数组和目标值 二分法查找+下午上海某金融公司(AI岗位,上市)CTO和主管技术面试之Xcepti
  5. DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构进行迁移学习
  6. ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型
  7. POJ_2104 K-th Number 【主席树】
  8. Android 2018最新验证手机号正则表达式
  9. Docker 三架马车
  10. linux与开发板串口通信