面向对象程序设计的核心思想:

  • 数据抽象:将类的接口与实现分类。
  • 继承:可以定义相似的类型并对其相似关系建模。
  • 动态绑定:我们能用同一段代码分别处理不同的对象。相同函数,根据动态绑定的对象实质进行区别。在运行时选择函数的版本,所以动态绑定有时又被称为 运行时绑定

1. 继承Inheritance

通过继承联系在一起的类构成一种层次关系,通常在层次关系的根部有一个 基类base class,其他类则直接或间接的从基类继承而来,这些继承得到的类称为 派生类derived class。

派生类可以继承其基类的成员,但是针对特定的操作,派生类可以提供自己新的定义,还可以覆盖从基类继承而来的旧定义。

2. 动态绑定dynamic binding

当使用指针或者引用调用虚函数时,该调用将动态绑定,根据引用或指针所绑定的对象类型不同,该调用可能执行基类的版本,也可能执行某个派生类的版本。

  • 静态类型:表达式的静态类型在编译时总是已知的,它是变量声明时的类型或表达式生成的类型。
  • 动态类型:变量或表达式表示的内存中的对象类型到运行时才可以知道。
  • 如果表达式既不是引用也不是指针,则它的动态类型永远与静态一致。

2.1 虚函数virutal function

基类希望它的派生类各自定义适合自身版本,将这些函数声明为虚函数;派生类必须通过派生类列表明确指明他是从那个基类继承而来的。即 基类希望派生类能进行覆盖的函数

2.2 在 C++ 语言中,使用基类的引用或者指针调用一个虚函数时将发生动态绑定。

eg. C++ 11 新标准允许派生类显示地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在函数的形参列表之后再加一个 override 关键字。

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. 虚析构函数 基类通常应该定义一个虚析构函数. class Quote {public:// virtual destructor needed if a base pointer pointin ...

  3. C++ Primer 5th笔记(chap 15 OOP)派生类的拷贝控制成员

    当派生类定义了拷贝.赋值.移动操作时,该操作负责拷贝.赋值.移动包括基类部分成员在内的整个对象. 1.1 定义派生类的拷贝或移到构造函数 class Base { /* ... */ };class ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. xgboost进行分类具体实现
  2. java类的运行顺序_Java语言类的基本运行顺序
  3. grep, sed, awk
  4. qq sid qq sid 是什么 qq sid 怎么用
  5. 北京高性能计算机应用中心,中国气象局高性能计算机系统资源使用报告-北京高性能计算机应用中心.PDF...
  6. NuGet version
  7. 线性判别分析LDA解析2
  8. 【尚硅谷_数据结构与算法】十二、算法
  9. webmax的3DMAX导出插件下载
  10. 查询某个网址的服务器IP
  11. Word插入Latex公式的几种方式~(TeXsWord、EqualX、Aurora、向Office插入LaTeX公式的工具)...
  12. Android 撕开衣服解析
  13. win10如何激活电脑系统
  14. 第四章 DDR3和FLASH 基于ARTY A7的MicroBlaze系统搭建与应用
  15. CGdiObject::DeleteObject的说法
  16. 分词使用 jieba 、IKAnalyzer
  17. 网易2018校园招聘:游历魔法王国 [python]
  18. gitlab cicd配置
  19. kingcms php 列表页bug,kingcms最新版sql注入漏洞
  20. Cesium 与百度全景API联动

热门文章

  1. python 数学符号读法大全_math_数字与数学 | Numeric Mathematical_Python_参考手册_非常教程...
  2. 移动端布局三种视口_移动端适配之视口和meta标签
  3. android studio 写文件,在Android Studio中从我自己的类读取和写入文本文件
  4. 2020年度国家绿色数据中心名单正式发布
  5. 调查:新冠病毒对全球结构化布线市场的影响
  6. 某厂家精密空调精品培训资料
  7. UPS不间断电源放电时间计算方法
  8. 成功解决Exception “unhandled ModuleNotFoundError“No module named ‘sklearn.neighbors.classification‘
  9. ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测
  10. 成功解决fp = builtins.open(filename, quot;rbquot;) OSError: [Errno 22] Invalid argument: 'F:\\File_Pyt