C grammar 訪問控制與抽象類與純虛函式

2021-10-10 15:37:24 字數 2485 閱讀 4221

3. 公有繼承

4. 私有繼承

5. 保護繼承

6. 私有繼承和保護繼承的區別

二、抽象類與純虛函式

1、theprivateandpublickeywords:

1、說明資料及函式是否可以從類外面訪問

2、私有成員只能在類內的函式訪問

3、公有成員可被任何其他類訪問

2、the **protected ** keywords:

護屬性的資料或函式可被派生類成員訪問

#include

using

namespace std;

classa;

classb:

public a };

intmain()

公有繼承的派生類定義形式:

class derived:public base;

(1) 基類成員 在派生類中的訪問屬性不變。

(2) 派生類的成員函式 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;

(3) 派生類以外的其它函式 可以通過派生類的物件,訪問從基類繼承的公有成員, 但不能訪問從基類繼承的保護成員和私有成員。

私有繼承的派生類定義形式:

class derived:private base;

(1) 基類成員 在派生類中都變成== private==。

(2) 派生類的成員函式 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;

(3) 派生類以外的其它函式

不能通過派生類的物件,訪問從基類繼承的任何成員。

保護繼承的派生類定義形式:

class derived:protected base;

(1) 基類成員 公有成員和保護成員變成protected,私有成員不變。

(2) 派生類的成員函式 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;

(3) 派生類以外的其它函式 不能通過派生類的物件,訪問從基類繼承的任何成員。

類太抽象以至於無法例項化就叫做抽象類。

從繼承鏈上來看:

1、派生類時,新類會越來越明確和具體

2、沿著派生類向父類移動,類會越來越一般化和抽象

3、如果我們沿著繼承鏈一直往上找,遇到了乙個類,這個類十分抽象以至於無法例項化,那麼我們稱這個類為抽象類。

成員函式應出現在哪個繼承層次?

假設有個shape類,它有兩個派生類:rectangle、circle

rectangle、circle都可以求面積,都有乙個getarea()函式。

對於getarea()函式的放置,我們有兩個選擇:

1、放哪兒都行,既可以放在基類shape也可以放在子類中定義

2、shape類定義中getarea()函式,並且強制要求shape的子類必須實現getarea()

對於第二種方法,怎麼實現強制要求呢?c++給出了抽象函式的概念:

抽象函式(abstract function) 也被稱為純虛函式(pure virtual function)

抽象函式要求子類實現它:

virtual double getarea() =0 ; //在shape類中,注意這裡不是大括號,而是替換為=0,純虛函式的「純」就體現於此

circle子類必須實現getarea()純虛函式才能例項化。

子類從基類將純虛函式繼承過來,如果不進行重新實現這個函式,那麼此時的子類也將是乙個抽象類,不能例項化。

並且要在函式後面加上override,表明是對抽象函式的覆寫。

注意:純虛函式不需要定義函式體也不能定義函式體

訪問控制與繼承

每個類分別控制自己的成員初始化過程,與之類似,每個類還分別控制著其成員對於派生類來說是否可訪問。受保護的成員 乙個類使用protected關鍵字來宣告那些它希望與派生類分離但是不想被其他公共訪問使用的成員。1。和私有成員類似,受保護的成員對於類的使用者來說是不可訪問的。2。和公有成員類似,受保護的成...

訪問控制與繼承

繼承控制中 派生類成員對父類成員的訪問 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 繼承控制中 派生類使用者對父類成員對的可訪問性 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 備註...

訪問控制與封裝

使用訪問說明符能夠加強類的封裝性 一般的,建構函式和部分作為介面的成員函式定義緊跟在public說明符之後。資料成員和作為實現部分的成員函式緊跟在private之後。乙個類可以包含0個或多個訪問說明符,對於某個說明符出現多少次也沒有限制。每個訪問說明符指定接下來的成員訪問級別,其有效範圍直到出現下乙...