C++中繼承關係簡介

繼承

單繼承

class SubClass:[繼承方式]ParentClass
{
//variables
};

子類成員對基類成員的訪問方式:繼承方式

子類成員對基類成員的訪問方式的限制是由繼承方式決定的,

class A {
public: 
         x;
protected:
         y;
private:
         z;
};

class B:[public/protected/private]A{

};



繼承方式 基類成員 子類成員訪問 子類中的成員函數 子類的對象
public public
protected
private
public
protected
不可訪問
可以訪問基類的public和protected成員 可以訪問基類的public和protected成員
protected public
protected
private
protected
protected
不可訪問
可以訪問基類的public和protected成員 不能訪問基類中的所有成員
private public
protected
private
private
private
不可訪問
可以訪問基類的public和protected成員 不能訪問基類中的所有成員

public繼承方式

如果子類對父類以public的方式繼承,那麼父類中的成員的屬性在子類中保持不變。父類的private成員爲其私有成員,子類無法訪問。

protected繼承

如果子類對父類以protected的方式繼承,那麼父類中的public/protected成員相當於子類的private成員。父類的private成員爲其私有成員,子類無法訪問。

private繼承

如果子類對父類以private的方式繼承,那麼父類中的public/protected成員相當於子類的private成員。父類的private成員爲其私有成員,子類無法訪問。


子類的構造函數

class A
{
public: 
       A(int m) {num=m;};
private:
      int num;
};

class SubClass: public A {
public:
        SubClass(int a, string s):A(a) {
                  s = s;
        }
private:
        string s;
};
當初始化SubClass的構造函數時,先初始化其父類A的構造函數,然後才初始化基類的構造函數。

多繼承

class A {
public:
        A(B b){
       }
};

Class B {
};
Class C: public A{
public:
         C(B b):A(b), b(b) {
         }
private:
          B b;
};
在多繼承時,父類和成員的初始化按照下列規則:
1,基類按照繼承順序從左到右調用構造函數初始化
2,調用成員變量的構造函數初始化,按照聲明順序,從上到下
3, 如果沒有成員變量初始化,跳過2步驟,直接初始化子類構造函數的函數體。

虛基類 virtual

當一個子類的多個父類同時從另一個共同的父類派生時,多個父類中擁有從同一父類繼承來的同名的成員,在 子類中,這些同名成員在內潤中擁有多個副本,同一個函數名擁有多個映射。使用虛基類,可以解決這類問題;
class Subclass:<strong>virtual</strong> public A

虛基類的初始化

通常,每個類只初始化自己的直接基類。在整個繼承關係中,直接或間接繼承虛基類的所有派生類,都必須在構造函數的成員初始化列表中列出對虛基類的初始化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章