虛函數(shù):
虛函數(shù)--類的成員函數(shù)前面加virtual關(guān)鍵字,則這個成員函數(shù)稱為虛函數(shù)。虛函數(shù)重寫--當(dāng)在子類的定義了一個與父類完全相同的虛函數(shù)時,則稱子類的這個函數(shù)重寫(也稱覆蓋)了父類的這個虛函數(shù)。

#include<iostream>using namespace std;class Person{public: virtual void BuyTickets() { cout << " 買全價票" << endl; }PRotected: string _name; };class Student : public Person{public: virtual void BuyTickets() { cout << " 買半價票 " << endl; }protected: int _num;};void Fun(Person& p){ p.BuyTickets();}void Test(){ Person p; Student s; Fun(p); Fun(s);}int main(){ Test(); return 0;}
多態(tài):
所謂多態(tài),其實就是“多種形態(tài)”。
C++中虛函數(shù)的主要作用就是實現(xiàn)多態(tài)。簡單說父類的指針/引用調(diào)用重寫的虛函數(shù),當(dāng)父類指針/引用指向父類對象時調(diào)用的是父類的虛函數(shù),指向子類對象時調(diào)用的是子類的虛函數(shù)。
虛函數(shù)表:
虛函數(shù)表是通過一塊連續(xù)內(nèi)存來存儲虛函數(shù)的地址。這張表解決了繼承、虛函數(shù)(重寫)的問題。在有虛函數(shù)的對象實例中都存在一張?zhí)摵瘮?shù)表,虛函數(shù)表就像一張地圖,指明了實際應(yīng)該調(diào)用的虛函數(shù)函數(shù)。
#include<iostream>using namespace std;class Base{public: virtual void func1() {} virtual void func2() {}private: int a;};void Test1(){ Base b1;}int main(){ Test1(); return 0;}
新聞熱點
疑難解答