3.2 C++繼承方式
阿新 • • 發佈:2017-09-19
pan 基類 price ble tla python const contain 訪問權限
參考: http://www.weixueyuan.net/view/6359.html
總結:
子類繼承父類,繼承方式將限制父類的成員屬性在子類中的訪問權限,子類訪問父類的成員,也需要遵循其成員的訪問權限,如 private 修飾的成員只能在當前類中使用,子類不能訪問。
同時父類的成員也是子類的成員,其在子類中的訪問權限由父類中的訪問權限及繼承方式決定。
3) private繼承方式
- 基類中的所有public成員在派生類中均為private屬性;
- 基類中的所有protected成員在派生類中均為private屬性;
- 基類中的所有private成員在派生類中均不可訪問。
從基類派生出派生類,派生類繼承基類的繼承方式有三種:public、protected和private。在未指定的情況下編譯器會默認繼承方式為protected或private方式。
1) public繼承方式
- 基類中所有public成員在派生類中為public屬性;
- 基類中所有protected成員在派生類中為protected屬性;
- 基類中所有private成員在派生類中不可訪問。
具體示例可以參考上一節中的例1,在此就不再重新舉例了。
2) protected繼承方式
- 基類中的所有public成員在派生類中為protected屬性;
- 基類中的所有protected成員在派生類中為protected屬性;
- 基類中的所有private成員在派生類中仍然不可訪問。
例1:
enum language{cpp, java, python,javascript, php, ruby};class book { public: void setprice(double a); double getprice()const; void settitle(char* a); char * gettitle()const; void display(); private: double price; char * title; }; class codingbook: protected book { public : void setlang(language lang); language getlang(){return lang;} private: language lang; };
本類同樣使用上一節中的示例,此時繼承方式改為了protected繼承,我們再來分析一下codingbook中類成員的屬性問題,具體見下表。
codingbook類成員 | 成員屬性 | 來源 |
---|---|---|
price | 不可訪問 | 繼承自book類 |
title | 不可訪問 | 繼承自book類 |
lang | private | codingbook新增 |
setprice | protected | 繼承自book類 |
settitle | protected | 繼承自book類 |
getprice | protected | 繼承自book類 |
gettitle | protected | 繼承自book類 |
dispaly | protected | 繼承自book類 |
setlang | public | codingbook新增 |
getlang | public | codingbook新增 |
3) private繼承方式
- 基類中的所有public成員在派生類中均為private屬性;
- 基類中的所有protected成員在派生類中均為private屬性;
- 基類中的所有private成員在派生類中均不可訪問。
例2:
enum language{cpp, java, python,javascript, php, ruby}; class book { public: void setprice(double a); double getprice()const; void settitle(char* a); char * gettitle()const; void display(); private: double price; char * title; }; class codingbook: private book { public : void setlang(language lang); language getlang(){return lang;} private: language lang; };
同樣,我們來分析一下本例中的codingbook類中所有成員的成員屬性,具體見下表。
codingbook類成員 | 成員屬性 | 來源 |
---|---|---|
price | 不可訪問 | 繼承自book類 |
title | 不可訪問 | 繼承自book類 |
lang | private | codingbook新增 |
setprice | private | 繼承自book類 |
settitle | private | 繼承自book類 |
getprice | private | 繼承自book類 |
gettitle | private | 繼承自book類 |
dispaly | private | 繼承自book類 |
setlang | public | codingbook新增 |
getlang | public | codingbook新增 |
3.2 C++繼承方式