C++ 虛擬函式
阿新 • • 發佈:2020-07-26
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)
所以這就是多型的機制,即一個介面實現多種形態。
以上只是自己的簡單理解,其實多型遠不止上述功能,其他自己還沒有理解到,有理解有誤的地方還請大家批評指正。