c 多型性起作用的地方和delete析構總結

2021-10-07 13:49:23 字數 1791 閱讀 5633

#includeusing namespace std;

/***************多型起作用的地方****

1)通過指標呼叫虛函式

2)通過引用呼叫虛函式

3)通過非靜態成員函式,呼叫虛函式,下面用例就是為了驗證這個,在成員函式中有乙個this指標。

****************/

class a

void test1()

virtual void test2()

void test3()

protected :

int a;

};class b:public a

void test1()//隱藏

virtual void test2()//覆蓋override

//void test3()

//};

int main(int argc,char **ar**)

輸出結果:

--------0--------

constructor a:10

class a:10

class a virtual:10

---------1--------

constructor a:20

class a:20

class a virtual:20

constructor b:20

class b:20

class b virtual:20

---------2--------

class a test3

class a virtual:10

class a test3

class b virtual:20

總結:只有指標或者引用訪問虛函式才會產生多型,而且我們呼叫delete時,也會呼叫this指標指向的析構函式,比如如下**:

class point

~point()

};class circle:public point

~circle()

};int main(void)

輸出:executing point destructor,只呼叫基類的析構函式,也就是this指標的型別是point*,

沒有發生多型,this就是靜態型別。

如果析構函式改為虛函式,則輸出:

executing circle destructor

executing point destructor

可以認為是乙個基類物件的型別呼叫虛函式(析構函式)發生了多型,靜態型別和動態型別不一致了,最終先呼叫派生類的析構函式。

下面有個更有意思的**,雖然析構函式不是虛函式,但由於destroy函式是虛函式,發生了多型,在執行時依據動態型別呼叫,所以此時的this是指向派生類,但具體**如下:

class point

~point()

virtual void destory()

};class circle:public point

~circle()

void destory()

};int main(void)

輸出:circle delete this

executing circle destructor

executing point destructor

C 多型性的理解和舉例

多型性是物件導向程式的乙個重要特徵,下面通過程式來理解程式的多型性 多型性 includeusing namespace std class point float gety const friend ostream operator ostream const point protected fl...

C 的靜態多型性和動態多型性(學習心得 20)

同乙個行為,具有多個不同表現形式或形態的能力。在物件導向程式設計正規化中,多型性往往表現為 乙個介面,多個功能 多型性可以是靜態的或動態的 在 c 中,每個型別都是多型的,因為包括使用者定義型別在內的所有型別都繼承自 object。同乙個事件發生在不同的物件上會產生不同的結果。超級小白友好,講解c ...

c 中虛函式和多型性的問題

我的疑問 的解答 解答一 拿動物為父類,定義乙個走動的函式,魚是游泳,鳥是飛.父類無法具體實現或者說不知道實現哪乙個,將方法virtual後,就沒有具體實現,讓子類自己實現 解答二 虛函式是在基類中定義的,目的是不確定它的派生類的具體行為。例 定義乙個基類 class animal 動物。它的函式為...