物件導向(五) 類的多型

2021-08-07 13:52:14 字數 1797 閱讀 8252

繼承的好處是乙個指向子類的指標與乙個指向基類的指標是型別相容的(type-compatible)

繼承的好處是乙個指向子類的指標與乙個指向基類的指標是type-compatible的,如以下**所示:

#include 

using namespace std;

class cfather;

class c********:public cfather

};class crectangle:public cfather

};void cfather::get_value(int a,int b)

int main()

在主函式中定義了倆個指向cfather物件的指標,即*tri_x和*rect_x倆個指標,分別被賦予了倆個子類物件的位址。

但是倆點需要注意:

1.tri_x和rect_x必須是cfather *型別的,因為c********和crectangle是其子類,因此我們只能引用從基類繼承而來的成員,只能使用wigth、height和get_value等成員。

2。申明的指標雖然賦予了子類的物件,但是*tri_x和*rect_x不能呼叫子類的函式成員和資料成員。

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

#include 

using namespace std;

class cfather //在這行**中,用了關鍵字virtual,表明這個函式要留在子類中進行定義,同時也使得cfather型別指標能夠訪問到這個函式

};class c********:public cfather //對函式virtual進行詳細定義

};class crectangle:public cfather

};void cfather::get_value(int a,int b)

int main()

//在上述**中,如果沒有了關鍵字virtual,那麼程式執行就不再是呼叫相應的area()函式(cfather::area(),c********::area(),crectangle::area()),而是直接全部呼叫基類中的這個area函式。

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

但是在這裡要注意,需要呼叫哪個子類的函式,那麼就必須用相應的位址給他。

基本的抽象類與我們前面例子中的類cfather非常相似,唯一的區別是在我們前面的例子中,我們定義了乙個有效的area()函式,即virtual int area(void),而在抽象類中,可以不對它定義,而是簡單的 virtual int area(void)=0;

lass cfather;

抽象基類不能申明物件(例項):cfather fat;非法的

但是申明指標是完全沒有問題的:cfather *fath;完全沒有問題

因為該類包含的純虛函式是沒有被實現的,而又不能生成乙個不包含它的所有成員定義的物件。但是這個函式在子類被完全定義了。

#include

using namespace std;

class cfather

};class c********:public cfather

};class crectangle:public cfather

};void cfather::get_value(int a,int b)

int main()

Go 物件導向 五) 多型

介面 只有方法的定義,沒有實現 全部是抽象方法 實現介面 結構體實現介面的全部抽象方法,稱為結構體實現了介面 多型 乙個父類 介面有不同的子類實現,本例中 勞動者介面 的具體實現有 程式設計師 產品經理 老闆 共性 程式設計師 產品經理 老闆 都會勞動和休息 個性 程式設計師 產品經理 老闆 的勞動...

Java基礎 物件導向(五)多型

一 概述 物件的多型性 class 動物 class 貓 extends 動物 class 狗 extends 動物 class demo 貓這類食物既具備貓的形態,又具備動物的形態。這就是多型性。簡單說 就是乙個物件對應著不同型別 提高了 的擴充套件性,前期定義的 可以使用後期的內容。abstra...

物件導向的多型

多型 1.必須要存在繼承關係 2.存在方法的重寫 不是必須,但是不重寫沒有意義 動物 d new 貓 動物 d new 狗 3.父類要指向之類的引用 父 f new 子 多型的注意事項 1.多型成員訪問的特點 fu f new zi 左邊為父類 右邊為子類 1 成員變數 編譯看左邊,執行看左邊 2 ...