C++ Primer 5th笔记(chap 15 OOP)继承之类型转换
1. 派生类->基类(编译器隐式执行)
1.1 将基类的指针或引用绑定到派生类的对象上:当使用基类的引用或指针时,实际上我们并不清楚该引用或指针所绑定对象的真实类型。该对象可能是基类的对象,也可能是派生类的对象。
Quote item; // 基类对象
Bulk_quote bulk; // 派生类对象
Quote *p = &item; // p指向基类 Quote 对象
p = &bulk; // p指向派生类 Bulk_quote 对象的基类部分
Quote &r = bulk; // r绑定到派生类 Bulk_quote 对象的基类部分
1.2. 派生类对象中含有与其基类对应的组成部分,所以能把派生类的对象当成基类对象使用
//当我们初始化或赋值一个类类型的对象时,实际上是调用构造函数或赋值运算符
Bulk_quote bulk;
Quote item(bulk) ; //调用Qutoe的构造函数
item = bulk; //调用Qutoe的operator=
切割sliced down:当我们用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值,它的派生类部分将被忽略掉。
- 和任何其他成员一样,派生类向基类的类型转换也可能会由于访问受限而变得不可行。
- 智能指针也支持派生类向基类的类型转换
2. 基类->派生类
不存在基类对象向派生类对象的隐式类型转换,但是当编译器无法确定某个特定的转换在运行时是否安全的时候,则可以,但这是很危险的
Bulk_quote bulk;
Bulk_quote *bulkP=itemP; //错误,不能将基类转换成派生类
如果在基类中含有一个或多个虚函数,可以使用 dynamic_cast 来请求一个类型转换,该转换的安全检查将在运行时执行,同样。如果已知某个基类向派生类转换是安全的,则可以使用 static_cast 来强制覆盖掉编译器的检查工作。
【引用】
[1] 代码oopTest.h
C++ Primer 5th笔记(chap 15 OOP)继承之类型转换相关推荐
- 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. 用户和类的实现者 用户:指类的对象或实例. 类的实现者:包括类的成员. 2. private.public.protect成员 2.1派生类可以访问公有public成员,而不能访问私有priva ...
- 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. 纯虚函数pure virtual 纯虚函数无需定义,通过在函数体的位置书写 =0 就可以将一个虚函数说明为纯虚函数. 其中 =0 只能出现在类内部的虚函数声明语句中. 可以为一个纯虚函数提供定义 ...
- C++ Primer 5th笔记(chap 15 OOP)虚函数
1. 定义 基类希望其派生类进行覆盖的函数(虚函数). 基类通过在成员函数前面加上 virtual 函数使得该函数执行动态绑定. 任何构造函数之外的非静态函数都可以是虚函数. 关键字 virtual ...
- C++ Primer 5th笔记(chap 15 OOP)概述
面向对象程序设计的核心思想: 数据抽象:将类的接口与实现分类. 继承:可以定义相似的类型并对其相似关系建模. 动态绑定:我们能用同一段代码分别处理不同的对象.相同函数,根据动态绑定的对象实质进行区别. ...
最新文章
- Python web 开发:部署一个3行代码的wsgi app
- ubuntu su进入root权限
- 区别ie8和ie9的方法
- sublime text3 最新 license注册码分享 2018
- 配置kali linux
- 描述一下普适计算时代中的计算机,《课程总结报告-普适计算及其应用》.doc
- linux多少个端口,Linux允许python使用多少个网络端口?
- MyBatis逆向工程自动生成代码(附数据库表结构)
- Spark Streaming揭秘 Day16 数据清理机制
- 短连接生成器——让你的url地址长度变短
- 在sqlServer中把数据导出为insert脚本
- rfp计算机,RFP(中英文).doc
- Unity为Mesh指定uv
- DOS命令是如何操作目录和文件夹的?
- matlab试算求解二元二次方程,matlab 求一个二元二次方程组的解
- 俄黑客入侵100多万部安卓手机 盗取500多万卢布
- NYOJ 小明的调查作业
- epub电子书如何用Windows电脑打开?
- Java基础学习(二十一)之接口
- 四核驱动的三维导航—淘宝新UI(设计篇)
热门文章
- js怎么把按钮往下移_js 实现单行数据上下移动
- 浮点数例外 (核心已转储)_15000 字梳理 JVM 的核心知识
- linux系统 安卓系统安装教程,最简单的Ubuntu Touch Android 双系统安装方式
- 几种常用的配电网络接线
- 成功解决ImportError: Something is wrong with the numpy installation. While importing we detected an olde
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- 成功解决ValueError: Shape of passed values is (1, 332), indices imply (1, 1)
- 成功解决AttributeError: 'list' object has no attribute 'shape'
- 《疯狂java讲义》6
- Maven-atguigu