C++--多重繼承
阿新 • • 發佈:2019-01-06
在實際中,一個派生類可以派生出兩個或者多個基類,派生類從兩個或者多個基類中繼承所需要的屬性,在這種情況下,C++允許一個派生類同時繼承多個基類。這稱為多重繼承。
多重繼承的宣告方法:
class D:public A,private:B,protected C
{
類D新增的成員
}
D是多重繼承的派生類,它以公有繼承的方式繼承A類,以私有繼承的方式繼承B類,以保護繼承的方式繼承C類。按照不同的方式繼承A,B,C屬性,確定各基類的成員在派生中的訪問許可權。
多重派生的建構函式
多重繼承會繼承引起二義性問題派生類建構函式名(總引數列表)基類1建構函式(引數列表),基類2建構函式(引數列表),基類2建構函式(引數列表),基類3建構函式(引數列表) { 派生類中新增成員資料初始化語句 }
(1)兩個基類中有同名的成員
class A
{
public:
int a;
void display();
};
classB
{
public:
int a;
void display();
};
class C:public A, public B
{
public:
int b;
void show();
};
在main函式中定義了C類物件C1:
C C1;
C1.a=3;
C1.display();
由於基類中A和B中都有成員 a 和成員函式 display,編譯系統無法判別要訪問的哪一個基類成員。可以用基類名限定:
(2)兩個基類和派生類中都有同名成員,修改C類:C1.A::a =3; C1.A:display();
class C:public A, public B
{
public:
int a;
void display();
};
同樣的,在main中如下定義:
C C1;
C1.a=3;
C1.display();
則系統訪問的是派生C中成員。
規則是:基類中的派生類成員被覆蓋,遮蔽,或者說是不可見的,或者說是:派生類中的同名成員覆蓋了基類的同名函式。
(3)類A和B是從同一個基類派生的。
從程式中,我們可以得到C類中的資料成員和成員函式:class N { public: int a; void display(); }; class A:public N { int a1; }; class B:public N { int a2; }; class C:public A,public B { public: int a3; void show(); }; int main() { C c1; }
資料成員:
int A::a;
int A::a1;
int B::a;
int B::a2;
int a3;
成員函式:
void A::display();
void B:display();
void show();
如果要訪問類N的派生類A的基類成員
c1.A::a=3;
c1.A::display();