C 多重繼承 環狀繼承

2021-10-01 10:14:17 字數 4008 閱讀 8121

ambigous 二義性、模糊性 繼承定義虛基類 (子類繼承父類的時候,在父類前加 virtual)

//基類

class beauty

beauty

(string n,

int a,

double h,

double w)

void

setinfo

(string n,

int a,

double h,

double w)

double

get_weight()

void

show()

~beauty()

};//派生類

class beautynt :public virtual beauty

beautynt

(string n,

int a,

double h,

double w,string nation)

:beauty

(n,a,h,w)

void

show()

};class beautystu :public virtual beauty

beautystu

(string n,

int a,

double h,

double w,

double score)

:beauty

(n,a,h,w)

void

show()

};/* 多繼承 環狀繼承,通過虛基類解決模糊性

1.ambigous 二義性、模糊性 繼承定義虛基類 (子類繼承父類的時候,在父類前加 virtual)

2.宣告指向父類的指標,列印發現值少了

這是早繫結問題

(在函式名前加 virtual)虛函式、純虛函式(沒有函式體,=0)

純虛函式就是抽象類

執行時多型 --- 虛函式

編譯時多型 --- 過載

*/class begirl :public beautynt, public beautystu

begirl

(string n,

int a,

double h,

double w,

double score,string nation,bool ***)

:beautynt

(n,a,h,w,nation)

,beautystu

(n,a,h,w,score)

,beauty

(n,a,h,w)

void

show()

};intmain()

當用指標指向物件的時候,指標.show方法會少列印東西

這是早繫結問題,用虛函式或者純虛函式

//基類

class beauty

beauty

(string n,

int a,

double h,

double w)

void

setinfo

(string n,

int a,

double h,

double w)

double

get_weight()

void virtual show()

//虛函式

~beauty()

};//派生類

class beautynt :public virtual beauty

beautynt

(string n,

int a,

double h,

double w,string nation)

:beauty

(n,a,h,w)

void

show()

};class beautystu :public virtual beauty

beautystu

(string n,

int a,

double h,

double w,

double score)

:beauty

(n,a,h,w)

void

show()

};class begirl :public beautynt, public beautystu

begirl

(string n,

int a,

double h,

double w,

double score,string nation,bool ***)

:beautynt

(n,a,h,w,nation)

,beautystu

(n,a,h,w,score)

,beauty

(n,a,h,w)

void

show()

};intmain()

#include

using namespace std;

//基類

class beauty

beauty

(string n,

int a,

double h,

double w)

void

setinfo

(string n,

int a,

double h,

double w)

double

get_weight()

// void virtual show() //虛函式

//

void virtual show()

=0;//純虛函式

~beauty()

};//派生類

class beautynt :public virtual beauty

beautynt

(string n,

int a,

double h,

double w,string nation)

:beauty

(n,a,h,w)

void

show()

};class beautystu :public virtual beauty

beautystu

(string n,

int a,

double h,

double w,

double score)

:beauty

(n,a,h,w)

void

show()

};class begirl :public beautynt, public beautystu

begirl

(string n,

int a,

double h,

double w,

double score,string nation,bool ***)

:beautynt

(n,a,h,w,nation)

,beautystu

(n,a,h,w,score)

,beauty

(n,a,h,w)

void

show()

};intmain()

多重繼承 C 中的多重繼承

多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...

C 多重繼承 虛繼承

c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多個父類的建構函式,析構函式同樣遵守單繼承中的原則。二意性問題 如果多基類中存在同名成員,會產生二意性的問題 比如,root1類中宣告doany 介面,root2類中也宣告了doany 介面,child多承繼root1和r...

C 繼承 3 多重繼承

目錄 1.多重繼承中建構函式的呼叫順序 2.菱形繼承問題 2.1問題介紹 2.2解決方法 2.3預設建構函式問題 3.總結 多重繼承是c 的乙個特性,使得乙個類可以繼承自多個類。子類會根據所繼承的類的順序,來依次呼叫父類的建構函式。例如,下面程式中,b的建構函式先於a的建構函式被呼叫。include...