我的一點小想法:
virtual只需要加在父類裡邊(析構函式和同名成員函式)就好,不過在子類的同名函式加上 virtual 是為了養成好的**書寫習慣。析構函式前邊加是為了防止沒有釋放子類物件的記憶體導致記憶體洩露,同名成員函式前加是為了父類例項化的物件指標能夠指向子類資料成員。(這樣基本包含了所有的點了)
**示例:
#include
#include
#include
using
namespace
std;
/** * 定義動物類:animal
* 成員函式:eat()、move()
*/class animal
// 析構函式
virtual ~animal()
// 成員函式eat()
virtual
void eat()
// 成員函式move()
virtual
void move()
};/**
* 定義狗類:dog
* 此類公有繼承動物類
* 成員函式:父類中的成員函式
*/class dog : public animal
// 析構函式
virtual ~dog()
// 成員函式eat()
virtual
void eat()
// 成員函式move()
virtual
void move()
};int main(void)
執行結果:
animal
dogdog--
eatdog--
move
~dog
~animal
虛函式實現原理
1、用父類例項化乙個子類物件,在這個物件中,父類的虛析構函式被繼承到子類的析構函式了,並同時產生虛函式表,物件的首部就是虛函式表,表頭指標指向虛函式,然後依次是資料成員,指標占用4個基本單元。
2、虛析構函式,delete父類的指標p,程式會去找父類的指標p指向的位址,該位址就是子類頭部虛函式表指標的位址,由指標p找到子類的虛函式表,從而找到子類的虛析構函式。
c 之多型篇(上)
物件型別 多型 是指向不同的物件傳送同乙個訊息,不同物件對應同一訊息產生不同行為。在程式中訊息就是呼叫函式,不同的行為就是指不同的實現方法,即執行不同的函式體。也可以這樣說就是實現了 乙個介面,多種方法 靜態多型 程式編譯時確定具體的工作 編譯器在編譯期間完成的,編譯器根據函式實參的型別 可能會進行...
c 之多型篇(下) 虛表,多型呼叫
定義 在成員函式的形參列表後面寫上 0,則成員函式為純虛函式。包含純虛函式的類叫做抽象類 也叫介面類 抽象類不能例項化出物件。純虛函式 在派生類中重新定義以後,派生類才能例項化出物件。測試 class base 抽象類 class dervied public base 測試 class base ...
C 學習之多型
多型性是物件導向程式設計中的乙個重要特徵,利用多型性可以設計和實現乙個易於拓展的系統。在c 語言中,多型性是指具有不同功能的函式可以用同乙個函式名,這樣就可以用乙個函式名呼叫不同內容的函式,發出同樣的訊息被不同型別的物件接收時,導致完全不同的行為。多型性通過聯編實現。聯編是指乙個電腦程式自身彼此關聯...