C++ Primer 5th笔记(chap 15 OOP)继承之派生类
1. 构造函数
每个类控制它自己的成员初始化过程:尽管派生类包含了从基类继承而来的成员,但是派生类不能直接初始化这些成员,而是需要使用基类的构造函数来初始化它们。
- 派生类对象的基类部分与派生类对象自己的数据成员都是在构造函数的初始化阶段执行初始化操作
- 首先会初始化基类的部分,然后按照声明的顺序依次初始化派生类的成员
eg.
Bulk_quote(const std::string& book,double p,std::size_t qty,double disc) :
quote(book,p),min_qty(qty),discount(disc){}
- 首先会初始化基类的部分,然后按照声明的顺序依次初始化派生类的成员。
2. 静态成员
如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义,无论从基类中派生出来多少个派生类,对于每个静态成员来说都只存在唯一的实例。
2.1访问控制规则
静态成员遵循通用的访问控制规则。如果某个静态成员是可以访问的,那么既可以通过基类也可以通过派生类使用它。
3. 派生类的声明
派生类的声明包含类名但是不包含它的派生列表:
class Bulk_quote : public Quote; // 错误,派生类列表不能出现在这里
class Bulk_quote; // 正确,声明派生类的正确方式
4. 被用作基类的类
如果想使用某个类作为基类,则该类必须是已经定义而非仅仅声明:主要是构造函数和成员变量必须定义,因为子类的构造函数必须使用父类的构造函数。
class Quote; // 声明,但未定义
class Bulk_quote : public Quote {...}; // 错误,Quote必须先被定义
- 派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类当然要先知道它们是什么,因此规定还有一层隐含的意思,即一个类不能派生它本身。
- c++中类,是在实例化时才会查找相关代码,没有使用就不会生成对应代码,函数无论使用都会生成。类会自动生成一个namespace,其中的静态成员和静态变量,相当于namespace中的变量和函数。
5.防止继承的发生
如果想定义一个类并且不希望从它派生出新的类,可以禁止继承的方式,C++ 11 新标准中在类名后面紧跟一个关键字 final 即可实现:
class NoDerived final{/*...*/}; // NoDerived 不能作为基类
C++ Primer 5th笔记(chap 15 OOP)继承之派生类相关推荐
- C++ Primer 5th笔记(chap 15 OOP)抽象基类
1. 纯虚函数pure virtual 纯虚函数无需定义,通过在函数体的位置书写 =0 就可以将一个虚函数说明为纯虚函数. 其中 =0 只能出现在类内部的虚函数声明语句中. 可以为一个纯虚函数提供定义 ...
- C++ Primer 5th笔记(chap 15 OOP)访问控制与继承
1. 用户和类的实现者 用户:指类的对象或实例. 类的实现者:包括类的成员. 2. private.public.protect成员 2.1派生类可以访问公有public成员,而不能访问私有priva ...
- C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中
C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中 测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中. 派生类有多少个拥有虚函数的基类,派生类对象就有多少 ...
- c++学习---继承与派生类
1.继承 继承性是面向对象程序设计当中最重要的机制,这种机制可以无限度的重复利用程序的 资源.通过C++语言中的继承机制,我们可以扩充和完善旧的程序设计以适应新的需求. 这样不仅可以节省程序开发的时间 ...
- C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器
1. 继承的构造函数 1.1 C++11新标准中,派生类可以重用其直接基类定义的构造函数. 继承方式是提供一条注明了直接基类名的using声明语句. class Bulk_quote : public ...
- C++ Primer 5th笔记(chap 15 OOP)继承中的类作用域
1. 派生类的作用域 每个类定义自己的作用域,作用域内定义成员,当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中 ...
- C++ Primer 5th笔记(chap 15 OOP)继承概念
1. 派生类可以访问其基类中的公有成员和受保护的成员. 一个派生类对象包含多个组成部分:含有派生类自定义的对象,继承自基类的对象. eg. 一个单继承的例子. //定义基类 class Quote{p ...
- C++ Primer 5th笔记(chap 15 OOP)构造函数和拷贝控制
1. 虚析构函数 基类通常应该定义一个虚析构函数. class Quote {public:// virtual destructor needed if a base pointer pointin ...
- C++ Primer 5th笔记(chap 15 OOP)虚函数
1. 定义 基类希望其派生类进行覆盖的函数(虚函数). 基类通过在成员函数前面加上 virtual 函数使得该函数执行动态绑定. 任何构造函数之外的非静态函数都可以是虚函数. 关键字 virtual ...
最新文章
- 每日一皮:程序员最讨厌的四件事!
- jsp 防止sql注入 之 preparestatement篇(转载)
- 【WebRTC---源码篇】(一)全局初始化
- 机器学习--Lasso回归(LassoRegression)
- [RK3399][Android7.1] Display系统中的DRM模块介绍
- 自架魔兽服务器物品代码,魔兽世界物品代码与GM指令大全(全部整理自网上).doc...
- Linux开发板烧录实验
- ubuntu内存不足时,扩展内存方法(亲测有效)
- VMware残留问题
- 安卓开发 投屏安卓设备到电脑端 scrcpy
- 校招信息可以看哪些网站
- 【云原生 | Kubernetes 系列】---CephFS和OSS
- 微信小程序获取用户头像昵称组件封装(最新版)
- 链新:区块链大赛火热,成为技术与创意的练兵场
- Halcon 初体验
- Lorry翻译(day 2)
- 一稻箩的官帽nbsp;-nbsp;本村施姓的传说
- 马上毕业了,拼多多和国家电网,选哪个?
- 计算机科学与技术考研难度排行,考研专业的难度排名
- python补充符号和图片_Python 图片转符号图
热门文章
- java调用方法的变量_JAVA类的方法调用和变量(全套)
- 数据中心存储解决方案市场将迎来快速增长
- 火神山医院紧急招募IT运维志愿者需求
- 机房为什么要设计冷热通道,设计原则及如何施工?
- 怎么样条件需要做屏蔽机房,屏蔽机房建设标准是什么?
- qt定时器是阻塞的吗_吊打面试官 | 面试官:TCP真的可靠吗
- ML:MLOps系列讲解之《基于ML的软件的三个层次之02 Model: Machine Learning Pipelines——2.6 ML Model serialization forma》解读
- BigData/Cloud Computing:购买并登录Windows弹性云服务器之详细攻略(图文教程)—更优惠、更贴心!
- DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构FineTuning
- 成功解决WARNING: You do not appear to have an NVIDIA GPU supported by the 430.34 NVIDIA Linux graph