一.运算符重载 operator:
* 本质:运算符 operator 就是函数名
* 单目运算符: ++,--
* 前置: 先自增,后输出(执行) 注意:(引用方式返回类)
* 后置: 先输出(执行),后自增 注意:(返回一个 const 修饰的局部类)
* 双目运算符: +,-,*,/,% 和 < 、 > 、 <= 、 >= 、 == 和 =
* 位运算符: << >>
* 其他运算符: [] , () , ->
* 实现方式:
* 1.全局运算符重载
* 2.类内运算符重载
* 运算符重载难点: 运算符太多,实现方法不同,照成内容记忆混乱
* 记忆重点:双目运算符,关系运算符,<<运算符,()仿函数运算符
单目运算符重载: ++(前置,后置(int占位)) , --(前置,后置(int占位))
注意:前置返回引用 , 后置返回 const 修饰的临时变量
二.继承:
* 作用:提高代码的复用性
* 语法: 在定义类名后加上 : 权限(通常public) 继承的类
* 如果多继承则使用逗号隔开
* 构造顺序: 继承 + 成员变量 他们的构造顺序又是什么样的?
私有权限 派生类继承了 基类的所有成员,但是有部分无法使用(私有,构造,析构,友元,运算符)
但是有部分无法使用(私有,构造,析构,友元,运算符)
派生类可以 覆盖或重写 父类的成员
默认调用父类无参构造
重点:初始化列表的时候最好调用一下父类的构造,否则默认调用父类无参构造
三.多继承:
* 1.非同源多继承出现同名问题?(二义性)
* 解决方案: 通过域方式调用
* 2.继承的构造顺序是什么顺序?
* 答: 构造顺序: 从左往右 ->
* 3.继承 + 成员属性 构造顺序是什么顺序?
* 答: “至上而下,从左往右,初始化列表无关”
* B -> A -> My -> AB
* 4.同宗同源多继承出现的问题?(菱形继承)
* 造成:空间多余浪费
* 答:使用 虚继承(virtual),减少内存占用,解决调用二义性
* virtual 会形成一个虚表,而类中的virtual是指向虚表的指针
* virtual 实质是一个指针(占 4字节)
四,多态 :
* 定义条件:
* 1.必须是继承关系
* 2.父类中函数虚函数,而子类必须重写父类虚函数
* 使用条件:
* 1.父类指针/引用指向子类对象
*
* 本质: 多态实现使用的是 virtual 虚函数指针,指向一个虚函数列表
*
* 问题:按照逻辑来说,我们的动物类是无法实例化的。
* 解决方案:形成抽象类,使用纯虚函数 virtual 函数() = 0;
* 该类无法实例化,必须子类实现父类纯虚函数
* 才能实例化,否则它还是一个抽象类
* 抽象类作用:提供一个框架接口,派生类根据需求制定不同的方案



