• C++ 虚函数


    C++ 虚函数是为实现多态而设计的。
    多态最核心的概念就是可以通过父类指针指向子类对象。
    多态最大的特点就是接口复用,即一个接口实现多种用途。
    要想实现多态,子类必须重载父类中的函数,否则就不是多态。例如某个函数只有子类中有定义,此时仍然使用父类指针调用该函数会报错
    先用简单的例子说明

    class base {
    public:
        base(){};
        virtual ~base(){};
    public:
        virtual void show()
        {
            printf("i am base
    ");
        }
    };
    class sub : public base {
    public:
        sub(){};
        virtual ~sub(){};
    
    public:
        void show()
        {
            printf("i am sub
    ");
        }
    };
    class sub2 : public base {
    public:
        sub2(){};
        virtual ~sub2(){};
    
    public:
        void show()
        {
            printf("i am sub2
    ");
        }
    };
    
    #include <stdio.h>
    #include "main.h"
    void callFunc(base *ptr)
    {
        ptr->show();
    }
    int main()
    {
        base *ptr = new base();
        sub *subPtr = new sub();
        sub2 *subPtr2 = new sub2();
        callFunc(ptr);
        callFunc(subPtr);
        callFunc(subPtr2);
        return 0;
    }
    

    上述代码,sub/sub2继承base,函数show为虚函数。
    函数callFunc通过父类指针ptr调用参数的show函数,由于输入的参数分别是base/sub/sub2的对象,所以上述程序的输出是:

    i am base
    i am sub
    i am sub2
    

    即通过一个接口,分别分别调到了不同对象的函数
    如果没有虚函数机制,要想实现上述同样的功能,需要实现三个callFunc函数

     void callFunc1(base *ptr)
     void callFunc2(sub *ptr)
     void callFunc3(sub2 *ptr)
    

    所以这就是多态的机制,即一个接口实现多种形态。
    以上只是自己的简单理解,其实多态远不止上述功能,其他自己还没有理解到,有理解有误的地方还请大家批评指正。

  • 相关阅读:
    vue typescript 父子组件间值的传递
    flex 布局列表自动换行
    css文字两端对齐
    webstorm windows 常用快捷键
    vue elmentUi el-scrollbar 美化滚动条样式
    简述在Vue脚手架中,组件以及父子组件(非父子组件)之间的传值
    简述Vue的实例属性、实例方法
    Js基本类型中常用的方法总结
    简述Vue中的过滤器
    简述Vue中的计算属性
  • 原文地址:https://www.cnblogs.com/wangdongfang/p/13381218.html
Copyright © 2020-2023  润新知