第十三章 虛函式

2021-09-08 16:22:42 字數 2203 閱讀 3869

//1 指向對像的指標

/*#include using namespace std;

class father

*///2 虛函式

/*#include using namespace std;

class father

*/// 3 拳擊遊戲

/*#include using namespace std;

class poser

m[i] = p;

m[i]->beat();

} return 0;

}*/// 4 繼承是否可以實現多型性

/*#include using namespace std;

class a

*///兩者之間為什麼會有這麼顯示著的區別呢?這是因為在不使用virtual之關

//c++對過載的函式使用靜態聯編輯,而使用了virtual以後,c++則對該函式進行動態聯編,

//那麼什麼是動態聯編輯,什麼又是靜態聯編輯呢,我們先來說明一下聯編

//c++中的聯編輯共分兩種

//就是靜態聯編輯和動態聯編輯

//發生變化,這樣的好處是速度快,因為執行的時候不用對各個物件的函式進行追蹤,只需要傳遞引數,執行確定好的函式並在函式呼叫完畢後清理記憶體即可

//因此我們看到第一例中由於基類的print函式未說明為虛函式,則該函式在執行的時候將採用靜態聯編,即不對過載的各個物件的函式進行追蹤

//這導致c++編譯器在編輯時認定的指向基類的三個指標p p1 p2在執行時也不會根據物件的改變而發生改變

//因此就算是將三個物件摧存位址依次賦給了三個指標,三個指標還是預設指向基類

//與其相反,動態聯編輯就要犧牲一些速度,因為每個函式呼叫在執行前是不可確立的

//要隨著使用者的操作來執行相應的函式,比如說在拳擊遊戲中使用者按下乙個出拳鍵,那麼系統將根據使用者選擇的角色不同面彩用不同的出拳(函式)

//出拳這個動作名是相同的確(函式名相同),但是他們產生的效果是不一樣的, 有的拳手力量大,有的拳手力量小

//(沙子數的功能不一,根據物件來定)。這個函式呼叫就是不可**的,因為你無法事先預料到使用者

//選擇的是哪些個角色,這就是**對每個角色進行追蹤,並且在遊戲執行時要時該地判斷該呼叫哪些個角色的拳頭(合適的函式),然後再呼叫它,雖然這樣比較靈活,但是相應地也就大大地增加了系統的開銷,

//不過在這個遊戲中使用動態聯編輯卻是非常好的選擇

//在編譯時的靜態聯編

/*#include using namespace std;

class a

};class b: public a

};int main()

};class b: public a

};int main()

};class b: public a

};int main()

};class b: public a

};int main()

};class son:public father

};class daughter:public father

};void one(father one);

void tow(father *two);

void three(father &three);

int main()

if(quit == true)

} return 0;

}void one(father one)

void tow(father *two)

void three(father &three)

*////

///系統是如何呼叫虛函式的

/*每個物件建立虛函式時,物件都得記錄這個虛函式,因此編譯器建立了乙個叫做t表的虛函式表

每個物件都有乙個指向該錶的指標,叫做虛表指標,該指標用來指向虛函式表,相反虛函式表也有乙個指標指向該物件

當建立派生類物件的基類部分時,該物件的指標就自動初始化為指向虛函式表的正確部分,當呼叫派生類物件的建構函式時

這個物件就會新增到虛函式表中去,並且將指標指向該物件的過載函式

當使用指向基類的指標時,將根據物件的實際型別,將該物件的指標繼續指向正確的函式*/

/*#include using namespace std;

class a

};class b : public a

};int main()

第十三章 併發

13.1 動機 13.2 基本執行緒 如果必須要控制現成的執行順序,最好是根本不用執行緒,而是自己編寫特定順序彼此控制的協作子程式。繼承thread類或者實現runnable介面。內部類實現。13.3 共享受限資源 1 如果要對類中的某個方法進行同步控制,最好同步所有方法。如果忽略了其中乙個,通常很...

第十三章 類

1.類簡單地說是乙個性的資料型別。類當中有資料成員,和成員函式。類的基本思想就是體現出資料的抽象和封裝。2.這裡只需要說明乙個問題即可 就是類成員函式的const型別 class screen public const int get const int i const int j const 這裡...

第十三章 事件

1 事件的作用 事件是對委託的封裝,如同屬性對字段的封裝。封裝後可以在委託上實現更複雜的邏輯。1.1 封裝訂閱 委託允許使用 對其進行賦值,但向乙個委託例項賦值多個委託時,使用 會造成覆蓋之前的委託。事件只支援 或 對事件進行賦值 1.2 封裝發布 委託可以在其他類進行訪問,而事件可以確保只有包容類...