不使用virtual關鍵字 模擬虛函式來表現多型性

2021-07-02 22:17:24 字數 1365 閱讀 8849

/*不使用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.而在自類中對虛函式進...