我是靠谱客的博主 冷酷蜻蜓,最近开发中收集的这篇文章主要介绍C++每日学习笔记DAY7,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部