第八章多型性與虛函式
記憶:1,物件呼叫的成員函式由物件所屬類決定。
如:類a物件a所呼叫成員函式是a中定義的成員函式或從a的基類繼承來的成員函式。
2,類中未定義虛函式,通過指標、引用所呼叫函式由指標、引用所屬類決定。
若主函式修改後,執行結果如圖:
問題:為什麼指標p1,p2呼叫的print是a類中的print?
如何修改程式能使得p1呼叫a類中的print函式,p2呼叫b類中的print函式?
3,若將基類成員函式f定義為虛函式,派生類中重定義了f函式,基類指標指向派生類物件並通過指標呼叫f函式時,該基類指標所呼叫f是派生類中的f函式。
執行結果:
說明:p是基類指標,p指向了派生類物件,p所呼叫area函式為派生類中的area函式。
rc是基類引用,rc引用了派生類物件,rc所呼叫area函式為派生類中的area函式。
display(a)函式:a是基類物件,display中通過a呼叫的area是基類中的area函式。
display(p)函式:通過p呼叫的是派生類中的area函式。理解為什麼是派生類的area函式。
display(rc)函式:通過rc呼叫的是派生類中的area函式。理解為什麼是派生類的area函式。
4,若將基類成員函式f定義為虛函式,派生類中未重定義f函式,基類指向派生類物件並通過指標呼叫f函式時,該基類指標所呼叫f是基類中的f函式。
5,虛函式定義形式:在函式首部加virtual關鍵字。注意:
類的成員函式才可定義成虛函式,static成員函式不能定義為虛函式,建構函式不可定義為虛函式,析構函式可定義為虛函式,friend函式不是成員函式不可定義為虛函式,基類中定義的虛函式f若在派生類中重定義後f函式在派生類中自動為虛函式。
class a
{ public:
virtual void f(){…………}
};class b:public a
{ public:
void f(){………}
};a類中f函式是虛函式,b類中對f進行了重定義,b中的f函式也是虛函式。
6,通過類的物件或成員函式呼叫類的成員函式。
第乙個主程式執行結果:
執行結果說明:
定義物件c呼叫首先a的建構函式,a建構函式為空函式,無輸出,然後呼叫b的建構函式,b建構函式中呼叫了func函式,此時b類中沒有func函式,故而呼叫其基類a的func函式所以輸出「這是a的函式func。」,然後呼叫c的建構函式,c的建構函式為空函式,無輸出。
呼叫c.fun()時,c類中無fun函式,c物件呼叫其基類b的fun函式,輸出「這是b類的函式fun。」在b類的fun函式中又呼叫func函式,此時由於是c物件呼叫的fun函式,所以func也是由c物件呼叫的,所以此func是c物件的func,也就是c類中的func函式,所以又輸出「這是c類的函式func。
」此時主程式執行結束,呼叫c類析構函式,c類析構函式中呼叫了fund函式,並c類中定義了fund函式輸出「這是c的函式fund。」,然後呼叫b類的析構函式,其中又呼叫了fund函式,此時b類中未定義fund函式,則呼叫繼承自a類的fund函式,輸出「這是a類的函式fund。」最後呼叫a類的析構函式。
注意:若將類a中的virtual關鍵字去掉後主程式1的執行結果如下:
問題:1,請對照住程式1的輸出結果寫出主程式2,3的輸出結果。
2,若將程式中virtual關鍵字去掉之後,寫出主程式2,3的執行結果。
總結:對於析構函式和構造函式呼叫成員函式時,呼叫的是基類或自身的函式。
物件呼叫成員函式時呼叫的是物件所屬類的成員函式。
特別注意c.fun函式的呼叫。
7,純虛函式
若虛函式定義時,不給出函式體,定義為如下形式:
class 類名
; 此虛函式則稱為純虛函式。
若虛函式定義時,不給出函式體,定義為如下形式:
class 類名
};此虛函式則稱為空虛函式。
為了定義乙個類,然後在此類基礎上派生多個類進行相似操作,可將基類定義為抽象類,並將相似操作對應的函式定義為虛函式。可利用基類指標指向派生類物件,或將基類指標作函式引數,以實現函式可對多個類的物件進行操作。
8,寫出程式執行結果
9,寫出程式執行結果
10,請寫出程式執行結果
第八章總結2019
第八章 電功率知識總結 知識點 8.1 電能 w 1 應用 電能轉化為其他形式能 例 電燈 電能能 電動機 電風扇 電能能 電吹風吹熱風時 電能 能 電熱器 例 電飯鍋 電能 能 8.2 電功率 p 1 含義 表示的 2 定義 單位時間內叫電功率。例題 1 1kw h的電能可以供 pz220 100...
第八章懸架
1 懸架的組成 想一想 懸架的位置在哪?你能否總結出什麼是懸架?懸架是車架 或車身 與車橋 或車輪 之間一切傳力連線裝置的總稱。現代汽車的懸架雖有不同的結構形式,但一般都由彈性元件 減振器 導向機構等組成,轎車一般還有橫向穩定器。懸架的組成如圖9 8所示。圖9 8 懸架的組成 1 彈性元件 螺旋彈簧...
力學第八章
第八章習題 8.1.1 一鋼杆的橫截面積為5.0 10 4m2,所受軸向外力如圖所示,試計算a b,b c和c d之間的應力.f1 6 104 n f2 8 104 n f3 5 104 n f4 3 104 n 解 在ab之間取截面a,對a a段有 f f1 6 104 n 拉伸應力 在bc之間取...