基類與派生類

2021-08-27 01:57:42 字數 1526 閱讀 3649

初學c++的時候,很多人都很頭疼各種訪問標號下基類與派生類的關係,其實,死記硬背肯定不是乙個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的:

在沒有繼承之前,類的只有兩類使用者:類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割:類的使用者只能訪問類的public部分,它們一般是類的介面;而類成員則既可以訪問public又可以訪問private部分,private部分是類的具體實現。當有了繼承之後,類的使用者多了一類:基類的派生類。派生類通常要訪問基類的一些具體實現,而又不希望讓一般的使用者訪問這些實現,所以就要把這些內容放置在一起,用protected標號來說明。從該類的使用者的角度,protected成員是私有的,你不能訪問基類物件的保護成員,但是從該類的繼承者的角度,protected則是共有的,因為他可以被繼承下來供派生類使用。

為了更進一步限制派生類對基類成員的訪問許可權,c++又通過訪問列表中的訪問標號來控制。具體的說

1.如果繼承方式為public,那麼基類中的public成員在派生類總仍為public,基類中的protected仍為protected,基類中的private在派生類中不能被訪問。

2.如果繼承方式為protected,那麼基類中的public成員在派生類中為protected,基類中的protected成員在派生類中為protected,基類的private成員在派生類中不能被訪問。

3.如果繼承方式為private,那麼基類中的public成員在派生類中為private,基類中的protected成員在派生類中為private,基類的private成員在派生類中不可訪問。

總結一下:

基類公有成員

基類保護成員

基類私有成員

公有繼承

派生類公有成員

派生類保護成員

派生類不可訪問

保護繼承

派生類保護乘員

派生類保護乘員

派生類不可訪問

私有繼承

派生類私有成員

派生類私有成員

派生類不可訪問

再來看乙個例子:

//基類

class base

int baseval_public;

void printval()

void getval()

private:

int baseval_private;

};class d1:public base

;class frnd

//基類的友元對派生類來說不起作用

//int mem(d1 d)

};class d2:public frnd

};

最後有一點需要注意,如果你使用的是class定義的派生類,那麼如果不寫訪問標號,那麼預設繼承關係為private;如果使用struct定義的派生類,不寫訪問標號,則預設繼承關係為public。

基類和派生類

include include using namespace std class animal class dog public animal class dog public animal這裡的 就是繼承或派生,class cat public animal class item base st...

基類和派生類 this

基類指標在程式執行的時候的確指向的是乙個派生類的物件,但指標的型別仍然是基類指標。c 是一種強型別語言,因此不能用基類指標型別的指標直接呼叫派生類 而且,同乙個類可能有多種不同的派生類,因此不知道實際指向的會是哪個派生類。如果確信是某個派生類的話,可以用這樣的方法來呼叫 cb this b 1 cb...

關於基類指標 派生類指標 基類物件派 生類物件問題

1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...