1. 程式人生 > 實用技巧 >C++ 虛擬函式

C++ 虛擬函式

C++ 虛擬函式是為實現多型而設計的。
多型最核心的概念就是可以通過父類指標指向子類物件。
多型最大的特點就是介面複用,即一個介面實現多種用途。
先用簡單的例子說明

class base {
public:
    base(){};
    virtual ~base(){};
public:
    virtual void show()
    {
        printf("i am base\n");
    }
};
class sub : public base {
public:
    sub(){};
    virtual ~sub(){};

public:
    void show()
    {
        printf("i am sub\n");
    }
};
class sub2 : public base {
public:
    sub2(){};
    virtual ~sub2(){};

public:
    void show()
    {
        printf("i am sub2\n");
    }
};
#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)

所以這就是多型的機制,即一個介面實現多種形態。
以上只是自己的簡單理解,其實多型遠不止上述功能,其他自己還沒有理解到,有理解有誤的地方還請大家批評指正。