剛開始看virtual關鍵字,對于這個東西理解的也不太透徹,virtual關鍵字我的理解就是一個指向子類的基類指標dad *a =new son(),如果在dad類方法里使用了virtual關鍵字定義方法,在son里也定義了這種方法,那么子類的方法就將覆寫父類的方法,如果沒有virtual,則呼叫父類方法。不知道對不對,希望大佬指正。
uj5u.com熱心網友回復:
virtual就是告訴編譯器,這個位置有人了在個虛表占位,留個位子,在對應的虛表函式指標為0,為后面繼承預留了方法介面,實作多型uj5u.com熱心網友回復:
收到,阿里嘎多。。。uj5u.com熱心網友回復:
virtual函式是多型的基石之一,定義是父類,實際使用的時候可以傳入子類,而子類的virtual重寫過的,那么最后使用的就是子類的函式。這樣就比較靈活了。uj5u.com熱心網友回復:
這個virtual是不是僅當這種基類指標和子類相互關聯的時候才會生效啊,繼承的時候嘞
uj5u.com熱心網友回復:
virtual函式主要就是用在類繼承的時候,如果沒有virtual,那么C++的繼承機制其實沒什么大的用途。但是有了virtual就不一樣了,整個繼承機制就活了。uj5u.com熱心網友回復:
舉個例子:游戲里有一個類,怪物。每個怪物都有一個劈砍的動作(這就是一個函式)
一個子類的物件,小怪a;一個子類的物件,小怪b;另外一個子類物件,bossA;
同樣的劈砍動作,根據物件不同,對玩家造成的傷害值是不同的;這里用到了virtual。
(以上是個人淺見)
uj5u.com熱心網友回復:
舉例:
#include <bits/stdc++.h>
using namespace std;
class father
{
public:
father()
{
cout << "father init" << endl;
}
virtual void dos()
{
cout << "father do" << endl;
}
};
class son: public father
{
public:
son()
{
cout << "son init" << endl;
}
void dos()
{
cout << "son do" << endl;
}
};
int main()
{
son s;
s.dos();
return 0;
}
結果:
father init
son init
son do
如果去掉virtual
#include <bits/stdc++.h>
using namespace std;
class father
{
public:
father()
{
cout << "father init" << endl;
}
void dos()
{
cout << "father do" << endl;
}
};
class son: public father
{
public:
son()
{
cout << "son init" << endl;
}
void dos()
{
cout << "son do" << endl;
}
};
int main()
{
son s;
s.dos();
return 0;
}
結果:
father init
son init
father do
相當于virtual表示這個函式會被子類重寫(多型)
個人淺見,僅供參考!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/198876.html
標籤:新手樂園
上一篇:用 JavaScript 實作一個 TicTacToe 游戲 —— 編程訓練
下一篇:急求 這段代碼哪里錯了?
