美文网首页
C++ 从入门到放弃 (Day-07)

C++ 从入门到放弃 (Day-07)

作者: 麦兜兜买兜兜 | 来源:发表于2018-11-01 10:35 被阅读11次

    父类的构造函数

    ◼ 子类的构造函数默认会调用父类的无参构造函数
    ◼ 如果子类的构造函数显式地调用了父类的有参构造函数,就不会再去默认调用父类的无参构造函数
    ◼ 如果父类缺少无参构造函数,子类的构造函数必须显式调用父类的有参构造函数

    继承体系下的构造函数示例

    ![image.png](https://img.haomeiwen.com/i694108/
    7b2e2f701f022b56.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    构造、析构顺序

    ◼ 构造和析构顺序相反


    image.png

    父类指针、子类指针

    ◼ 父类指针可以指向子类对象,是安全的,开发中经常用到(继承方式必须是public) ◼ 子类指针指向父类对象是不安全的


    image.png

    多态

    ◼ 默认情况下,编译器只会根据指针类型调用对应的函数,不存在多态
    ◼ 多态是面向对象非常重要的一个特性
    同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
    在运行时,可以识别出真正的对象类型,调用对应子类中的函数
    ◼ 多态的要素
    子类重写父类的成员函数(override)
    父类指针指向子类对象
    利用父类指针调用重写的成员函数

    虚函数

    ◼C++中的多态通过虚函数(virtual function)来实现
    ◼ 虚函数:被virtual修饰的成员函数
    ◼ 只要在父类中声明为虚函数,子类中重写的函数也自动变成虚函数(也就是说子类中可以省略virtual关键字)

    虚表

    ◼ 虚函数的实现原理是虚表,这个虚表里面存储着最终需要调用的虚函数地址,这个虚表也叫虚函数表


    image.png

    虚表(x86环境的图)

    image.png

    ◼ 所有的Cat对象(不管在全局区、栈、堆)共用同一份虚表

    虚表汇编分析

    image.png

    虚表(x86环境的图)

    image.png

    VS的内存窗口

    image.png

    调用父类的成员函数实现

    image.png

    相关文章

      网友评论

          本文标题:C++ 从入门到放弃 (Day-07)

          本文链接:https://www.haomeiwen.com/subject/wrmtxqtx.html