1. 程式人生 > >3.2 C++繼承方式

3.2 C++繼承方式

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++繼承方式