• 12. 虚函数与多态


    Inheritance(继承) with virtual functions(虚函数)

    1. non-virtual函数(不是虚函数):你希望drived class(子类)不要重新定义(overide,覆盖)。
    2. virtual()函数:你希望devired class(子类)最好去重新定义(overide),且你对它(指父类的虚函数)已有默认定义。
    3. pure virtual(纯虚)函数:你希望devired class(子类)一定重新定义(overide),你对它(指父类的虚函数)完全没有默认的定义(其实可以由定义,但你不去定义它)。
    4. 写笔记的时候可以考虑多用点副词,以加深印象。

    注解:

    1. 任何一个成员函数前面加上一个virtual进行修饰,它就会成为虚函数。
    2. 在继承的关系里面,所有的东西都可以被继承下来,这包括私有数据和函数的调用权限。函数的继承继承的是调用权。
    3. 子类可以调用父类的所有成员函数,但子类在调用的时候要不要重新定义呢?见行文一开始的1、2 、3.

    注解:

    1. 父类有时候只设计了一个框架,有些动作父类不知情,所以完成不了,这时候就需要设计成虚函数,在子类中实现。
    2. 在main()函数中,首先创建一个子类的对象,通过子类对象调用父类函数(在面向对象的编程中,这是一个非常经典的想法)。
    3. 最关键的那一刻是:Serialize()的实现在子类中,调用路线是遇到父类中的Serialize()就跑去子类中找具体的实现。
    4. 父类中的Serialize()函数也许3年前就设计好了,但是一直没实现,等着客户去实现,这就是设计模式、模板模式(Templat Method)。
    5. myDoc调用父类的OnFileOpen(),myDoc(调用我的那个)就会成为隐藏的this pointer.从编译器的角度考虑,它会这样写CDocument::OnFileOpen(&myDoc);&myDoc,即myDoc的地址是隐藏的参数,它将被传到父类中的OnFileOpen()函数的参数中。
    6. this->Seirialize(); 值通过this 调用Seirialize(),this是谁?this是&myDoc。
    • Inheritance+Composition关系下的构造和析构函数的调用顺序(?)

    注解:

     注解:

    1. Base,Component, Derived可以认为是类名。
    2. 构造函数的调用顺序是:由内而外。
    3. 析构函数的调用顺序是:跟构造函数调用顺序相反。
  • 相关阅读:
    List
    集合
    layui树状组件tree回显如果子节点选中,当前主节点下所有元素都会选中问题修复
    layui富文本编辑器提交时无法获取到值
    thinkphp6+layui富文本编辑器页面回显显示HTML标签
    layui获取树形菜单所有选中的值
    php7将二维数组转为树状数组
    jq处理img标签找不到图片,显示指定图片
    thinkphp6根据访问设备不同访问不同模块
    layui怎么进入页面监听select的值然后重新渲染页面
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/13395369.html
Copyright © 2020-2023  润新知