C 實現多型的條件

2021-10-04 18:42:18 字數 1528 閱讀 9252

1.派生類物件必須賦值給基類的引用或者指向基類的指標。

2.派生類的繼承方式必須是公有繼承public。

如果是protected繼承或者是private繼承,那麼子類的所有方法只能在內部訪問,這時候就不需要多型了。一般會有語法報錯。

3.基類中的同名函式必須定義為虛函式。

舉個例子: 

#includeusing namespace std;

int main()

; };

class p :public b };

class q :public b };

p p;

q q;

b b1 = p; //這種情況只能是呼叫父類的函式

b1.f();

b& b2= p;

b2.f();

b& b3 = q;

b3.f();

}

執行結果:

1.必須首先在基類中宣告虛函式。在多繼承的情況下,也可以不在最高層的基類中宣告虛函式。

例如在第二層定義的虛函式,可以和第三層的虛函式形成動態聯編,但是,一般都是在最高層的基類中首先宣告虛函式。

2.基類和派生類的同名函式,函式名,返回值,參數列必須全部相同,才能作為虛函式來使用。

否則即使用virtucal來說明,也不具有虛函式的行為。

3.虛函式不可以是靜態成員函式,建構函式也不可以是虛函式。

因為虛函式的呼叫需要虛表,虛表又由建構函式建立。

4.析構函式可以宣告為虛函式,可以定義虛析構函式。 

5.在多繼承中,最高層第三層有兩個原型相同的函式,並且在最高層宣告為虛函式,則第三層的這個函式也是虛函式。 

這種關係並不會因為第二層沒有定義這個函式而受影響。

1.虛函式是為了實現多型服務的。

有虛函式的類,可以被例項化,但是虛函式必須實現(有函式體,裡面有什麼不要緊)這個很好理解,類中的函式沒有實現編譯時候會報錯。

2.純虛函式是為了抽象類服務的。而抽象類作用是為了靈活規範子類以及多型。

有純虛函式的類無法例項化,即抽象類無法被例項化。

純虛函式必須在子類當中被實現,否則該子類也只能是抽象類。

附上幾道試題:

C 多型的實現

封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...

C 多型的實現

多型的繫結可以分為執行是多型和編譯時多型 編譯時的多型性 編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的引數 返回的型別等資訊決定實現何種操作。執行時的多型性 執行時的多型性就是指直到系統執行時,才根據實際情況決定實現何種操作。c 中,執行時的多型性通過虛成員實現。編...

C 多型的實現

封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...