關於C 多型的一些概念和理解

2021-08-18 02:15:36 字數 1393 閱讀 7621

概括:「乙個介面,多種方法」,程式在執行時才決定呼叫的函式;

實現:通過虛函式實現,虛函式允許子類重新定義成員函式,而子類重新定義父類的做法成為遮蔽或重寫(重寫分為兩種,重寫成員函式和重寫虛函式,只有重寫虛函式才能體現c++的多型),而過載並沒有體現多型性:

這裡簡單概括下過載:過載允許允許多個同名的函式,而這些函式的引數列表不同,允許的引數個數不同,引數型別不同,或者兩者都不同。當函式呼叫時,編譯器會根據傳入的引數去逐個匹配這些函式的引數,匹配對應的函式,如果匹配失敗編譯器會報錯;

常見多型用法:宣告乙個基類指標,指向任意乙個派生類物件,然後呼叫相應的虛函式,可以根據指向的派生類的不同而採取不同的方法;形如:

基類people中宣告的虛函式virtual void display();派生類teacher,student中宣告的void display();

people *p = new teacher(「wang」,33);

people *q = new student(「zhang」,22);

p->display(); //呼叫的是teacher中的display();

q->display(); //呼叫的是student中的display();

這個例子很好的體現了多型性;

而在上面例子中也可以看出,虛函式對於多型實現的作用:有虛函式才能構成多型;

1.只需在虛函式的宣告處加上vircual關鍵字;

2.通常只需要在基類中的函式宣告為虛函式,這樣所有派生類中具有遮蔽(覆蓋)關係的同名函式都將自動宣告為虛函式;(如果其派生類為其他類的基類的話,若要體現多型則任需加上vircual);

3.當在基類中重新定義了虛函式,如果派生類沒有重新定義函式來遮蔽此函式,那麼將使用基類的虛函式;

4.只有派生類的虛函式 遮蔽 基類的虛函式(函式原型相同)才能構成多型(通過基類指標訪問派生類函式)如:基類虛函式原型:vircual void func();派生類虛函原型:vircual void func(int);基類指標p指向派生類物件時,p->func(100);則會出錯,而p->func();則會呼叫基類函式;

5.建構函式不能是虛函式。因為派生類不能繼承基類的建構函式,僅僅是呼叫,所以將析構函式宣告為虛函式沒有意義。

———>為什麼?

1.因為虛函式是在執行過程確定實際型別,而在構造乙個物件時,該物件還未構造成功。編譯器無法確定物件的型別是基類還是派生類,

2.虛函式的執行依賴於虛函式表,而在建構函式時虛函式表還沒有初始化

6.析構函式可以宣告為虛函式。

構成多型的條件:

必須存在繼承關係;

繼承關係中必須有同名的虛函式,並且他們是遮蔽(覆蓋)關係;

存在基類指標,通過該指標呼叫虛函式;

學習自ppt

C 多型的一些理解

1.c 中的多型,簡單來說是用基類的指標指向子類的物件,然後用這個基類指標就可以呼叫子類物件的方法 這些方法在基類中有,且被宣告為虛函式 如果乙個方法沒有被宣告為虛函式,則呼叫哪個方法取決於指標的型別。2.這是自己寫的乙個例子 class a public virtual void say clas...

C 一些概念理解

封裝 隱藏細節,資料和方法實行public,private,protece 繼承 不修改的前提下擴充套件功能 多型 將父類設定成於子類對等地執行操作 過載是函式名相同,引數不同 重寫是函式名相同,引數相同,子類重新定義父類的虛函式 1 類中有const和引用型別的成員。2 類中有某個成員類沒有pub...

C 關於多型的一些總結

多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。1 什麼是多型 2 多型有什麼用 3 多型的原理是什麼 4 如何實現多型 5 c 的純虛函式 2 多型是物件導向的重要技術之一,它是...