C 的多型實戰

2021-09-12 18:55:00 字數 2143 閱讀 6972

一 指向基類指標的例子

1 **

#include using namespace std;

class cpolygon

};class crectangle : public cpolygon

};class c******** : public cpolygon

};int main()

2 執行

[root@localhost test]# g++ test.cpp -g -o test

[root@localhost test]# ./test

2010

3 說明

繼承的好處之一是乙個指向子類的指標與乙個指向基類的指標是型別相容的。

使用*ppoly1和*ppoly2取代rect和trgl的唯一限制是*ppoly1和*ppoly2是cpolygon*型別的,因此只能夠引用crectangle和c********中繼承的成員。正是由於這個原因,我們不能夠使用*ppoly1和*ppoly2來呼叫成員函式area(),而只能使用rect和trgl來呼叫這個函式。

二 虛擬成員

1 **

#include using namespace std;

class cpolygon

// 如果想在基類中定義成員留給子類進行細化,我們必須在它前面加關鍵字virtual,以便可以使用指針對指向相應的物件進行操作

virtual int area(void)

};class crectangle : public cpolygon

};class c******** : public cpolygon

};int main()

2 執行

[root@localhost test]# g++ test.cpp -g -o test

[root@localhost test]# ./test

2010

0

3 說明

關鍵字virtual的作用就是在使用基本的指標的時候,使子類中與基類同名的成員在適當的時候被呼叫。

注意:雖然本身被定義為虛擬型別,我們還是可以宣告乙個cpolygon型別的物件並呼叫它的area()函式,它將返回0.

三 第乙個抽象基類的例子

1 **

#include using namespace std;

class cpolygon

// 該函式是純虛函式,包含純虛函式的類被稱為抽象基類

virtual int area(void) = 0; // 簡單地在函式宣告後面寫「= 0」

};class crectangle : public cpolygon

};class c******** : public cpolygon

};int main()

2 執行

[root@localhost test]# g++ test.cpp -g -o test

[root@localhost test]# ./test

2010

3 說明

抽象基類的最大不同是它不能夠有例項,但我們可以定義指向它的指標。

四 第二個抽象基本的例子

1 **

#include using namespace std;

class cpolygon

virtual int area(void) = 0;

void printarea(void)

};class crectangle : public cpolygon

};class c******** : public cpolygon

};int main()

2 執行

[root@localhost test]# g++ test.cpp -g -o test

[root@localhost test]# ./test

2010

C 繼承多型筆試面試題實戰分析

目錄 例題一 例題二 例題三 例題四例題五 include includeusing namespace std class animal virtual void bark 0 protected string name class cat public animal void bark clas...

C 多型 繼承多型

什麼是多型?個人理解為 在程式語言繼承關係中,子類能替代父類,表現出不同的行為。換句話說 在繼承關係中,乙個類被例項化被其子類替代,子類中有父類的虛方法重寫,或者有父類同名方法 new 呼叫相同方法時候,將表現出子類或者父類中不同行為 老闆,上 static void main string arg...

C 什麼是多型,多型的用途

qq群 807236138 群稱 ios 技術交流學習群 1 定義 乙個介面,多種方法 程式在執行時才決定呼叫的函式。2.實現 c 多型性主要是通過虛函式實現的,虛函式允許子類重寫override 注意和overload的區別,overload是過載,是允許同名函式的表現,這些函式引數列表 型別不同...