為了定義乙個基類,然後派生出幾個子類分別對應不同的情況,在基類中寫好函式介面,之後可以使用基類作為介面來對幾種不同子類的情況進行操作.
為了方便解釋,我寫乙個小的程式驗證一下相關的想法:
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...