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...