C 多型初探

2021-10-04 23:29:00 字數 1555 閱讀 1007

為了定義乙個基類,然後派生出幾個子類分別對應不同的情況,在基類中寫好函式介面,之後可以使用基類作為介面來對幾種不同子類的情況進行操作.

為了方便解釋,我寫乙個小的程式驗證一下相關的想法:

abase →

\rightarrow

→ a →

\rightarrow

→ a1

abase 為基類,有純虛函式fun();a為其派生類,覆蓋重寫了虛函式,a1為a的派生類,繼續重寫了函式

#include

using

namespace std;

class

abase

;classa:

public abase

virtual

void

fun(

)const};

classa1:

public a

virtual

void

fun(

)const};

void

print_aclass

(abase * a)

void

print_aclass_1

(a * a)

intmain()

結果為:

for the a:

now, it's a

print_aclass:

now, it's a

for the a1:

now, it's a

now, it's a1

print_aclass:

now, it's a1

the second fun:

print_aclass_1:

now, it's a1

可以看到幾點:

首先構造a1時先構造它的基類a,所有a中的建構函式也要被呼叫,而且是先於a1的建構函式被呼叫

呼叫函式print_aclass時傳入的是abase的繼承類,在執行引數類物件裡面的函式fun時,不管其基類有沒有宣告fun的內容(宣告:print_aclass(a1_); 未宣告: print_aclass_1(a1_))呼叫的是子類複寫的fun函式

講到這裡,繼續看一下如果子類沒有複寫,是什麼效果

classa2:

public a};

//main

cout << endl <<

"for the a2:"

<< endl;

a2 *a2 =

newa2()

;print_aclass

(a2)

;

結果:

for the a2:

now, it's a

now, it's a

print_aclass:

now, it's a

可以看到,函式會呼叫距離子類最近的實現了該函式的父類的函式.因為,如果沒有override的話,預設為和其父類相同,因此實際上還是呼叫的該類中的函式fun

(8) 多型初探

多型,多種狀態!就是乙個類,根據不同的情況,採用相同的方法而產生不同結果的過程。用mysql資料庫類 oracle資料庫類 redis資料庫類 類似動物行為類 通過datebase抽象類實現新增資料 刪除資料 修改資料 查詢資料的目的。抽象類 import abc class datebase me...

C 多型性機制初探

作為物件導向程式設計的四大特徵 抽象 封裝 繼承和多型 之一的多型性,是考察開發人員對物件導向的基礎掌握程度的有力知識點。面試中也經常被問到像這樣的問題 請簡述一下什麼是多型?c 多型的實現機制是什麼?等等之類。今天我們就來小談一下c 的多型機制。首先,我們先開宗明義 在c 中,多型性通過虛函式 v...

C 多型 繼承多型

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