C 派生類成員的訪問屬性

2022-01-11 12:22:51 字數 2711 閱讀 5737

c++繼承方式總共分為以下幾種:public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。

(1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件只能訪問基類中的public成員。

(2)private(私有繼承):繼承時基類中各成員屬性均變為private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。

(3)protected(保護性繼承):繼承時基類中各成員屬性均變為protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。

由上表可知:

public繼承:不改變基類成員的訪問控制。

private繼承:派生類所繼承的基類成員的訪問控制都變為private。

protected繼承:基類中的private成員的訪問控制不變,其餘的都變為protected。

基類的 public成員被派生類繼承,且在派生類中是可見的(visible in the derived class)。

基類的 private成員被派生類繼承,但在派生類中是不可見的(not visible in the derived class)。

以下面兩個例子來說明受保護成員的可見性。

classbc

protected:

int get_x( ) const

private:

intx;

};class dc : publicbc

}voidg()

classbc

;class dc : publicbc

void base_w( const bc& b ) const

};

保護成員是專為繼承機制而設的。

受保護成員(a protected member)僅在自己的類和其派生類中是可見的。

繼承方式不會影響基類成員在派生類中的能見度。

如果在派生類中新增了成員(資料、函式),其與基類的成員重名,本地成員(the local member)隱藏繼承來的成員 ( hides the inherited member)。

以下面的**為例:

class

bc ;

class dc : public

bc ;

dc繼承自bc,其中bc含有void h(float)函式,dc中含有void h(char)函式,這兩個函式的簽名不同,那麼是否能夠構成函式的過載呢?

對於下面的兩行**都能夠執行?

void

f ( )

其實這種想法是不對的,過載必須是同一級的函式才能構成,而這兩個函式的級別是不一致的,本地成員void h(char)

將會隱藏繼承來的成員void h(float)!!

void

f ( )

再就乙個例子

對於乙個實現陣列公升序的類繼承自乙個陣列類。

class

array

private

:

intlast_pos;

//……

};class ascarray : public

array

//...

};

其呼叫函式如下呼叫語法是正確的,但是其內涵錯誤

void  f (ascarray& as

)

乙個繼承成員的訪問控制可能通過使用using宣告( using declaration)改變。

還是上面那個例子。

class ascarray : public

array

//...};

void f(ascarray& as

)

在使用using宣告時,基類中公有的成員在公共派生類中必須是公有的,只有這樣才能保證公有繼承時「派生類物件是乙個基類物件」的邏輯關係。

在基類中的private成員,不能在派生類中任何地方用using宣告。

同時,在基類中的protected成員,可在public派生下通過using宣告改為public成員。

派生類成員的訪問屬性

討論訪問屬性時,需要考慮以下幾種情況 1 基類的成員函式訪問基類成員 2 派生類的成員函式訪問派生類自己增加的成員 3 基類的成員函式訪問派生類的成員 4 派生類的成員函式訪問派生類的成員 5 在派生類外訪問派生類的成員 6 在派生類外訪問基類的成員 對於 1 和 2 的情況,即基類的成員函式訪問基...

C 繼承時派生類的成員訪問屬性

公用 public 訪問許可權最高 除派生類外,外部函式也可以直接訪問 無論是成員變數還是成員函式 私有 private 訪問許可權最低 只能是該類內部函式互相呼叫,派生類 外部函式都不能訪問。保護 protect 訪問許可權中間 該類內部函式 派生類都能訪問,外部類 外部函式不能訪問 我們這樣來記...

C 語言基礎 例程 派生類成員的訪問屬性

賀老師的教學鏈結 本課講解 公用繼承 演示 修改student中的訪問限定符,編譯及執行,從而檢視結果 當student中的3個資料成員改為private時,程式的兩種改法 1 在student1中的show1 方法中呼叫show 2 在main 函式中呼叫stud1.show include in...