/*不使用virtual關鍵字 ,模擬虛函式來表現出多型性:
寫一基類person 有sayhello,saygoodbye函式
有一子類student 它也有自己的sayhello, saygoodbye函式
請在這兩個類裡加入函式 vsayhello, vsaygoodbye函式
來表現出物件的多型性(分別呼叫自己的對應的sayhello和saygoodbye)
分別使用靜態成員函式指標,和成員函式指標完成
*/
#include "stdafx.h"
#include using namespace std;
class person;
class student;
typedef void (person::*funtype)();
typedef void (student::*funtype2)();
//而且位址指向的是全域性資料區,那麼我們在模擬的時候可以用全域性指標,或者靜態成員指標
class person
~person()
void sayhello()
void saygoodbye()
void vsayhello()
void vsaygoodbye()
protected:
funtype *m_lpvtable;
static funtype m_lppersontable;
};//靜態資料成員賦值
funtype person::m_lppersontable = ;
class student :public person
~student()
void sayhello()
void saygoodbye()
void vsayhello()
void vsaygoodbye()
public:
static funtype2 m_lpstudenttable;
};funtype2 student::m_lpstudenttable = ;
int main(int argc, char* argv)
//上面的vsayhello,和vsaygoodbye是為了實現更簡單!我們訪問虛表的函式,可以直接用下面的方法!
(lpperson->*lpperson->m_lpvtable[0])();
(lpperson->*lpperson->m_lpvtable[1])();
訪問類的成員函式指標!(當然也包含陣列的下標定址方式)
C abstract和virtual關鍵字
abstract 顧名思義表示抽象,可以形容方法和類等。為什麼要使用抽象類,個人理解,在設計乙個父類時,會提供一些共同的方法,而繼承的不同子類往往會有一些自己獨特的方法,而這些方法在父類中沒辦法去統一,也沒必要去實現,所以只做方法宣告而不去實現,表示為抽象函式,用於子類去實現。1.抽象方法時沒有實現...
C 虛函式 virtual關鍵字
當函式被virtual關鍵字修飾時,該函式被稱為虛函式,虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類的版本。虛函式最關鍵的特點是 動態聯編 它可以在執行時判斷指標指向的物件,並正確呼叫物件的函式。而函式的過載可以認為是...
虛函式中virtual關鍵字的使用問題
在c 中用到關鍵字virtual的一共有兩個部分 乙個是虛繼承,乙個是虛函式 今天主要講解虛函式中用到virtual的一些簡單部分。就當是加深記憶 1.在基類中宣告虛函式一定要用關鍵字 virtual 2.而如果虛函式的實現單獨來做,則不能用virtual關鍵字,否則會報錯。3.而在自類中對虛函式進...