三種繼承方式對於基類成員的訪問許可權

2021-09-25 21:25:27 字數 2156 閱讀 7937

對於c++的繼承方式共有三種:

public繼承

#include

#include

using std::cout;

using std::endl;

//定義乙個基類

class

carcar

(const

char

* category,

const

char

* function)

:_category

(new

char

[strlen

(category)+1

]())

,_function

(new

char

[strlen

(function)+1

]())

void

print

(void)~

car(

)protected

:int protected_val =10;

private

:char

* _category;

char

* _function;};

//定義乙個派生類

class

little_car

:public car

void

print

(void)~

little_car()

private

:char

* _name;

//車的名字

float _price;

//車的**};

intmain

(void

)

由上述**可知,如果採用public方式繼承,則派生類內部可以訪問基類中的非private成員(包括public和protected成員),同時,派生類所示例化的物件也能訪問基類中的public中的成員,但該物件不能訪問基類中的protected和private成員,如果在主函式中新增下面的**

cout << mycar.car::protected_val << endl;
int car::protected_val』 is protected within this context

顯然派生類例項化的物件不能訪問基類中的protected和private成員,private成員不能訪問是非常顯然的,對於protected成員不能訪問,就是因為protected成員就是為基類的派生類能訪問而基類之外的所有物件不能訪問設定的。所以總的來說,對於使用public方式繼承:

protected繼承

如果採用protected方式繼承,示例**仍然如上,但是

mycar.car::

print()

; cout << mycar.car::protected_val << endl;

但是上述兩條語句發生錯誤

『class car car::car』 is inaccessible within this context

提示基類car是不能訪問的,這就是protected的作用,按照protected方式繼承,則基類中的protected和public成員在其派生類中是protected的,也就是說基類中的protected和public成員只能在其派生類中訪問,不能在其派生類例項化的物件中訪問。綜上,對於protected方式繼承:

private繼承

仍然是上述示例**,執行**,結果和使用protected方式繼承一致,因為按照private方式繼承,就是說派生類從基類中繼承的成員,只能在該類內部進行使用,同時也不能繼承到下乙個子類(有該派生類產生),綜上,對於private方式繼承:

從上面的分析可以看出來,對於private和protected方式的繼承,在結果上二者表現一致,但是,一般使用private方式繼承表示該類已經達到了最後,不會再派生出其他子類,因為該類從上乙個類中是按照private方式繼承,其子類是不能訪問上乙個類中的所有成員,沒有說明意義。如果按照protected方式繼承,可以繼續派生出子類,且該子類能訪問基類中的protected和public成員。

綜上而言,派生類對於基類成員的訪問許可權:

類的三種繼承訪問方式

類的繼承有三種方式,其一為公有繼承 其二為私有繼承 其三為保護整合。其繼承原理大致如下 class a 建立乙個基類,即繼承的類 1.公有繼承 class b public a 以公有方式繼承a類,則a類中的成員屬性在繼承類中保持不變。2.私有繼承 class b private a 以私有方式繼承...

類的三種繼承方式

類的繼承方式 公有型 public 保護型 protected 私有型 private 訪問控制修飾符也有public protected private3種型別。繼承方式不同,可訪問性也不同,這個部落格也很詳細 公有型派生 公有型派生表示對於基類中的public資料成員和成員函式,在派生類中依舊是...

類的三種繼承方式

首先來看類成員的訪問許可權。private 只能由該類中的函式 其友元函式訪問,不能被任何其他訪問,該類的物件也不能訪問.protected 可以被該類中的函式 子類的函式 以及其友元函式訪問,但不能被該類的物件訪問 public 可以被該類中的函式 子類的函式 其友元函式訪問,也可以由該類的物件訪...