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)继承之类型转换相关推荐

  1. C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

    1. 继承的构造函数 1.1 C++11新标准中,派生类可以重用其直接基类定义的构造函数. 继承方式是提供一条注明了直接基类名的using声明语句. class Bulk_quote : public ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. C++ Primer 5th笔记(chap 15 OOP)虚函数

    1. 定义 基类希望其派生类进行覆盖的函数(虚函数). 基类通过在成员函数前面加上 virtual 函数使得该函数执行动态绑定. 任何构造函数之外的非静态函数都可以是虚函数. 关键字 virtual ...

  9. C++ Primer 5th笔记(chap 15 OOP)概述

    面向对象程序设计的核心思想: 数据抽象:将类的接口与实现分类. 继承:可以定义相似的类型并对其相似关系建模. 动态绑定:我们能用同一段代码分别处理不同的对象.相同函数,根据动态绑定的对象实质进行区别. ...

最新文章

  1. Python web 开发:部署一个3行代码的wsgi app
  2. ubuntu su进入root权限
  3. 区别ie8和ie9的方法
  4. sublime text3 最新 license注册码分享 2018
  5. 配置kali linux
  6. 描述一下普适计算时代中的计算机,《课程总结报告-普适计算及其应用》.doc
  7. linux多少个端口,Linux允许python使用多少个网络端口?
  8. MyBatis逆向工程自动生成代码(附数据库表结构)
  9. Spark Streaming揭秘 Day16 数据清理机制
  10. 短连接生成器——让你的url地址长度变短
  11. 在sqlServer中把数据导出为insert脚本
  12. rfp计算机,RFP(中英文).doc
  13. Unity为Mesh指定uv
  14. DOS命令是如何操作目录和文件夹的?
  15. matlab试算求解二元二次方程,matlab 求一个二元二次方程组的解
  16. 俄黑客入侵100多万部安卓手机 盗取500多万卢布
  17. NYOJ 小明的调查作业
  18. epub电子书如何用Windows电脑打开?
  19. Java基础学习(二十一)之接口
  20. 四核驱动的三维导航—淘宝新UI(设计篇)

热门文章

  1. js怎么把按钮往下移_js 实现单行数据上下移动
  2. 浮点数例外 (核心已转储)_15000 字梳理 JVM 的核心知识
  3. linux系统 安卓系统安装教程,最简单的Ubuntu Touch Android 双系统安装方式
  4. 几种常用的配电网络接线
  5. 成功解决ImportError: Something is wrong with the numpy installation. While importing we detected an olde
  6. Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
  7. 成功解决ValueError: Shape of passed values is (1, 332), indices imply (1, 1)
  8. 成功解决AttributeError: 'list' object has no attribute 'shape'
  9. 《疯狂java讲义》6
  10. Maven-atguigu