文章目录
- 第八章 继承 (Inheritance)
-
- 8.1 引入
-
- 8.1.1 为什么需要继承 why inherit/li>
- 8.1.2 引例
- 8.1.3 结论
- 8.2 继承
-
- 8.2.1 定义
- 8.2.1 定性 is-a Not has-a
- 8.2.3 语法
- 8.2.4 继承方式
-
- 8.2.4.1 分类
- 8.2.4.2 集成方式影响了什么
- 8.2.4.3 结论
- 8.2.5 派生类的组成
-
- 8.2.5.1 组成图示
- 8.2.5.2 sizeof(父/子)
- 8.3 派生类的构造
-
- 8.3.1 语法格式
- 8.3.2 构造原理
-
- 8.3.2.1 图示
- 8.3.2.2 注释
- 8.3.3 实战
- 8.4 派生类的拷贝构造
-
- 8.4.1 语法
- 8.4.2 构造顺序
-
- 8.4.2.1 图示
- 8.4.2.2 注释
- 8.4.3 实战
- 8.5 派生类的赋值重载
-
- 8.5.1 语法
- 8.5.2 赋值顺序
-
- 8.5.2.1 图示
- 8.6 派生类的友元函数
-
- 8.6.1 友元在派生类
- 8.7 派生类析构函数
- 8.8 继承方式
-
- 8.8.1 类别
-
- 8.8.1.1 public
- 8.8.1.2 protected
- 8.8.1.3 private
- 8.8.2 派生类成员标识
-
- 8.8.2.1. 图示(表格/图)
- 8.8.3 类的作用域运算符
-
- 8.8.3.1 隐藏(Shadow)
- 8.8.3.2 作用域运算符
- 8.8.8.3 小结
- 8.9 why public
-
- 8.9.2 继承测试
- 8.9.3 结论
- 8.10 多重继承 (Multiple Inheritance)
-
- 8.10.1 多继承的意义
- 8.10.2 语法格式
-
- 8.10.2.1 继承语法
- 8.10.2.2 构造器格式
- 8.10.3 实战-沙发床
-
- 8.10.3.1 继承结构
- 8.10.3.2 沙发床实现
- 8.10.4 三角问题
-
- 8.10.5 钻石问题
- 8.10.5.1 虚基类-虚继承
- 8.10.6 语法小结
-
- 8.10.6.1 虚继承的意义
- 8.10.6.2 虚基类
- 8.10.6.3 虚继承
- 8.10.6.4 初始化顺序
- 8.10.7 改造沙发床
- 第九章 多态 (Polymorphism)
-
- 9.1 什么是多态
-
- 9.1.1 生活中的多态
- 9.1.2 C++中的多态
- 9.2 赋值兼容(Assign Compatible)
-
- 9.2.1 赋值兼容规则
- 9.2.2 实现
- 9.2.3 安全转化
- 9.3 多态形成的条件 (ConditionsofPolyMorphism)
-
- 9.3.1 静多态
- 9.3.2 多态
- 9.3.3 虚函数 virtual function
-
- 9.3.3.1 格式
- 9.3.3.2 多态三要素实践
- 9.3.3.3 覆写关键字override(C++11)
- 9.3.3.4 虚函数在多继承中
-
-
- TODO
-
- 9.3.3.5 虚函数小结
- 9.4.3 纯虚函数 (Pure virtual function)
-
- 9.3.4.1. 格式
- 9.3.4 虚析构 (Virtual Destructor)
- 9.4 多态案例分析
- 9.4.1 为什么虚析构 virtual destructor
- 9.4.2 设计模式之依赖倒置原则
- 9.4.3 公司管理系统设计
-
- 9.4.3.1 需求
- 9.4.3.2 类架构设计
- 9.4.3.3 基类详细设计
- 9.5 RTTI 运行时类型信息
-
- 9.5.1 语义
- 9.5.2 typeid
-
- 9.5.2.1 基础类型应用
- 9.5.2.2 多态体系应用
- 9.5.2.3 小结
- 9.5.2.4 type(*) 和 type(&)
- 9.5.3 dynamic_cast;
- 9.5.3.1 语法解析
- 9.5.3.2 dynamic_cast 之 Downcast
- 9.6 多态实现原理剖析
- 第十章 模板 (Template)
-
- 10.1 模板语义
- 10.2 函数模板 (Func Template)
-
- 10.2.1 重载泛型
- 10.2.2 函数模板
-
- 10.2.2.1 语法
- 10.2.2.2 模板泛化
- 10.2.2.3 模板参数作返回类型
-
- TODO
- 10.2.2.4 特性小结
- 10.2.2.5 原理
- 10.2.3 函数模板的应用
-
- 10.2.3.1 算法抽象
- 10.2.3.2 void quickSort(T* array, intl eft, int right)
- 10.2.4 函数模板默认参数
- 10.2.5 函数模板的特化
- 10.2.6.函数模板适用场景
- 10.3 类模板 (Class Template)
-
- 10.3.1 Stack 类
- 10.3.2 类模板
-
- 10.3.2.1 格式
- 10.3.2.2 应用
- 十一章 IO 流 (IO Stream)
-
- 11.1 IO class
-
- 11.1.1 Hierachy
- 11.1.2 流类特性
-
- 11.1.2.1 不可赋值和复制
- 11.1.2.2 缓冲
- 11.1.2.3 重载了<< >>
- 11.2 istream status
-
- 11.2.1 状态位的意义
- 11.2.2 状态位操作函数
- 11.3 cout
-
- 11.3.1 格式输出
- 11.3.2 成员函数
- 11.4 cin
-
- 11.4.1 >>
-
- TODO
- 十二章 异常 (Exception)
-
- 12.1 Error
- 12.2 C Error
- 12.3 Exception definition
-
- 12.3.1 语法格式
- 12.3.2 使用条例
- 12.3.3 抛出异常声明
- 12.4 栈自旋
- 12.4.1 unwinding
- 12.4.2 RAII in Exception
- 12.5 Standard Exception
-
- 12.5.1 异常自定义
- 12.5.2 标准异常
-
- 12.5.2.1 便准异常分类
第八章 继承 (Inheritance)
8.1 引入
8.1.1 为什么需要继承 why inherit/h3>
在 C++中代码的可重用性(software reusability)是通过继承(inheritance)这一机制来实现的。
如果没有掌握继承性,就没有掌握类与对象的精华。
8.1.2 引例
在”老师“与”学生“之前,代码重用性的思考。
Human是从学生和讲师中抽象出来的共同属性。让学生和老师均继承自Human的话, 就可以实现代码的重用性了。
8.1.3 结论
继承是一种设计的结果,通常是发生于一套类库中的,设计代码重用的方式,这种关系是一种设计而为之,不是想继承,就可随便继承的。
8.2 继承
8.2.1 定义
类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是 类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。 派生与继承,是同一种意义两种称谓。
8.2.1 定性 is-a Not has-a
is-a 是一种属于关系,如:狗属于一种动物,车属于一种交通工具(DogisanAnimal.Car is a Vehicle.)在面向对象中表现为一种继承关系。可以设计一个 Animal 类,Dog 类作为 Animal 类(基类)的派生类;设计一个Vehicle类,Car类作为Vehicle类(基类)的派生类。
has-a是一种包含、组合关系。如:车包含方向盘、轮胎、发动机(Car hassteering-wheel, wheels, engine),但不能说方向盘/轮胎/发动机是一种车;狗包含腿、尾巴,但不能说腿、 尾巴是一种狗。正确的应该说车聚合(包含)了方向盘、轮胎、发动机。 因此,如果 A is a B,则 B 是 A 的基类,A 是 B 的派生类。为继承关系。如果 A 包含 B, 则B 是 A 的组成部分。为聚合关系,可以由组成部分聚合成为一个类。 宏观意义上来讲, is-a 和 has-a 均可以实现代码的可重用性。
8.2.3 语法
默认的继承方式是 private 私有继承。
一个派生类可以同时有多个基类,这种情况称为多重继承,派生类只有一个基类,称为单继承。 下面从单继承讲起。
8.2.4 继承方式
8.2.4.1 分类
公有继承(public):基类的公有成员(public)和保护成员(protected)在派生类中保持原有访问属性,其私有成员仍为基类的私有成员。
私有继承(privated):基类的公有成员(public)和保护成员(protected)在派生类中成了私有成员,其私有成员仍为基类的私有成员。
保护继承(protected):基类的公有成员(public)和保护成员(protected)在派生类中成了保护成员,其私有成员仍为基类的私有成员。
本章节只讨论公有继承。其他两种之后学习。
8.2.4.2 集成方式影响了什么
继承方式规定了子类如何访问从基类继承的成员。
继承方式有public,private,protected。继承方式不影响派生类的原访问权限,影响了从基类继承而来的成员的访问权限,包括派生类内的访问权限和派生类对象的访问权限。
8.2.5.2 sizeof(父/子)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!