zoukankan      html  css  js  c++  java
  • 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)
    

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

  • 相关阅读:
    03_Redis数据类型(List)
    02_Redis数据类型(String、Hash)
    01_Redis基础
    22_AOP_切面——静态切面
    21_AOP_Advice增强2(异常、引介)
    20_AOP_Advice增强1(前置、后置、环绕)
    19_AOP概述
    18_CGLib动态代理
    利用NTP搭建自己的ntp服务
    VM设置BIOS延长时间
  • 原文地址:https://www.cnblogs.com/wangdongfang/p/13381218.html
Copyright © 2011-2022 走看看