1. 程式人生 > >C++--多重繼承

C++--多重繼承

在實際中,一個派生類可以派生出兩個或者多個基類,派生類從兩個或者多個基類中繼承所需要的屬性,在這種情況下,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,編譯系統無法判別要訪問的哪一個基類成員。可以用基類名限定:
C1.A::a =3;
C1.A:display();
(2)兩個基類和派生類中都有同名成員,修改C類:
class C:public A, public B
{
 public:
	int a;
	void display();
};

同樣的,在main中如下定義:

C C1;
C1.a=3;
C1.display();
則系統訪問的是派生C中成員。

規則是:基類中的派生類成員被覆蓋,遮蔽,或者說是不可見的,或者說是:派生類中的同名成員覆蓋了基類的同名函式。

(3)類A和B是從同一個基類派生的。

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;
}
從程式中,我們可以得到C類中的資料成員和成員函式:

資料成員:

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();