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)

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

原文地址:https://www.cnblogs.com/wangdongfang/p/13381218.html