虛函式以及覆蓋
class a
分析class a中宣告乙個虛函式 f() , 派生類中class b 對這個虛函式進行了覆蓋,重新定義。
a *pa = new a(); 中申明乙個a類得指標,並宣告乙個物件。
所以 pa->f() 結果應該為 a
b *pb = (b*)pa; 把基類a的指標轉化為派生類b的指標pb ,但是pa並沒有變化,pb 此時指向的位址和pa是一樣的。
pb->f() 此時輸出應該為 a
delete pa ,pb ,刪除了兩個動態建立的指標的記憶體,但是兩個指標並沒有刪除,pa仍是a ,pb 任然是b
pa = new b() ; 宣告乙個派生類的指標 並把這個指標賦值給基類的指標 pa ,所以呢由於f()為虛函式,所以根據多型特性,
pa->f() 此時呼叫的f() 是呼叫的派生類b 的所以輸出為 b
pb = (b*)pa ; 把基類指標pa 轉化為派生類指標pb ,但是二者指向的內容是相同的,所以
pb->f() 輸出為 b
#include using namespace std;
class a
{public:
virtual void fun(int number = 10)
{std::cout << "a::fun with number " << number10,非20
上面的函式中輸出的結果是b::fun with number 10
動態繫結 派生類的物件給了基類的指標,基類的指標呼叫派生類的函式,但是由於這個函式有乙個實參,在編譯的時刻就確定 了,所以輸出應該是10.
C 中虛函式,純虛函式以及多型
關於建構函式和析構函式 在整理排序演算法的時候想到可以藉此熟悉一下類的構造以及繼承等知識點,就寫了乙個排序基類宣告乙個排序函式,然後寫多個排序演算法的子類重寫這個排序函式,過程中順便研究了一下virtual和多型的概念。首先回顧一下虛函式和純虛函式的八股文,虛函式是多型的實現機制,宣告乙個虛函式就是...
C 多型 虛函式 虛析構函式以及虛函式表
什麼是多型 指不同物件收到相同訊息時或相同物件收到不同訊息時產生不同的動作。這裡先說下為什麼會用到虛函式 以下面的程式為例 這個程式中,carp是fish的繼承類,而carp中覆蓋了swim這個方法,在makefishswim這個函式中,要使用fish類的形參,而你將yourfish這個carp類的...
虛函式以及c 成員函式的呼叫原理
class base11 virtual int get public int m i class subclass public base11 virtual int get public int m j int main base11 p 0 subclass q p q int fun nul...