1. 程式人生 > >3.5 C++間接繼承

3.5 C++間接繼承

統一 pub () right 通過 span bsp 屬性 code

參考:http://www.weixueyuan.net/view/6362.html

總結:

  假設類C繼承自類B,類B繼承自類A。那麽類C中的除了能夠繼承B類的成員函數和成員變量外,同樣也能繼承B類繼承自A類的所有成員。換言之,類C可以繼承來自類A的所有成員。因此繼承既可以是直接繼承,也可以是間接繼承。

例1:

class A
{
public:
    int getx(){return x;}
    void setx(int a){x = a;}
private:
    int x;
};

class B : public A
{
public:
    int gety(){return
y;} void sety(int b){y = b;} private: int y; }; class C : public B { public: int getz(){return z;} void setz(int c){z = c;} private: int z; };

在本例中,先定義了類A,然後通過派生定義了類B,之後再派生出類C。B類和C類都有自己新增的成員變量和成員函數。下面我們將以表格的形式列出類A、B和C的所有成員和成員變量。

成員屬性來源
A x private 自身
getx public 自身
setx public 自身
B x 不可訪問 繼承自類A
setx public 繼承自類A
getx public 繼承自類A
y private 類B新增
sety public 類B新增
gety public 類B新增
C x 不可訪問 繼承自類B
setx public 繼承自類B
getx public 繼承自類B
y 不可訪問 繼承自類B
sety public 繼承自類B
gety public 繼承自類B
z private 類C新增
setz public 類C新增
getz public 類C新增


從表中我們可以看出類C不僅包含B類的成員,同時還包含了類A中的成員,在表格中我們都這些成員都統一歸為繼承自類B,而實際上我們也可以將成員變量x及成員函數setx和getx視為間接繼承自類A。當然,間接繼承所得的成員變量和成員函數,其屬性遵循直接繼承時的規則。

3.5 C++間接繼承