概述
1.多态
1.1 静态多态--例如函数重载、运算符重载
1.2 动态多态--例如父子之间继承 + 虚函数
1.3 动态多态满足的条件如下:
1.3.1 父类A中应有虚函数
1.3.2 子类B中重写父类A的虚函数
1.3.3 父类A的指针或者引用要指向子类B的对象
1.4 重写:子类B重新实现父类A中的虚函数,必须要有返回值、函数名、参数与父类B的函数一致
1.5 子类B在重写时,可以选择不加virtual关键字
2.多态原理
2.1 当父类A存在虚函数后,内部发生结构变化
2.2 多了指针 vfptr -虚函数表指针--指向虚函数表 --vfable
2.3 虚函数表内部记录虚函数的地址
2.4 在子类B发生重写后,会修改子类B中的虚函数表中的函数地址,但是不影响父类A中的虚函数表
3.多态好处
3.1 对扩展性提高,组织性强,可读性强
3.2 如果父类A中有了虚函数,子类B没有重写父类A的虚函数,那么这样的代码是毫无意义的
3.3 如果子类B不重写父类A虚函数,那么无法用到多态带来的好处并且内部结构还变得更加复杂
3.4 开闭原则:对扩展进行开放,对修改进行关闭
4.纯虚函数和抽象类
4.1 纯虚函数语法: virtual void func()= 0;
4.2 类中有纯虚函数后,这个类可以称为抽象类
4.3 抽象类是无法进行实例化对象的
4.4 继承抽象类的子类B,必须要重写父类A中的纯虚函数,否则子类B也是属于抽象类,进而也不能实例化对象
5.虚析构和纯虚析构
5.1 如果子类B中有属性创建在堆区,那么多态情况下不会调用子类B的析构代码,以至于内存泄漏
5.2 解决办法: 利用虚析构或者纯虚析构
5.3 虚析构是在析构前加关键字 virtual
5.4 纯虚析构是 virtual ~函数名()=0
5.5 纯虚析构必须类内声、类外实现
5.6 如果一个类中有了纯虚析构函数,那么这个类也属于抽象类
6.向上向下类型转换
6.1 父类A转子类B进行向下类型转换--不安全
6.2 子类B转父类A进行向上类型转换---安全
6.3 如果是多态的,那么不论进行向上向下转换都是安全的
7.重载、重写、重定义
7.1 重载-函数重载
7.1.1 满足同一作用域、同一函数名
7.1.2 满足参数个数、类型、顺序不同
7.1.3 返回值不可作为重载的条件
7.2 重写
7.2.1 满足继承关系、
7.2.2 父类A中要有虚函数
7.2.3 子类可重写父类中的虚函数,返回值、函数名、参数类别都需要一致
7.3 重定义(隐藏)
7.3.1 满足继承关系
7.3.2 非虚函数、子类重新定义的父类中同名的成员函数
最后
以上就是冷酷蜻蜓为你收集整理的C++每日学习笔记DAY7的全部内容,希望文章能够帮你解决C++每日学习笔记DAY7所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复