【十二】初探繼承

1、繼承概念

面向對象中的繼承指類之間的父子關係

  • 子類擁有父類的所有成員變量和成員函數
  • 子類就是一種特殊的父類
  • 子類對象可以當作父類對象使用
  • 子類可以擁有父類沒有的方法和屬性

示例:

class Parent
{
private:
  int a;
public:
  Parent()
  {
    a = 100;
  }
  void print()
  {
    cout << "a = " << a << endl;
  }
};

class Child : Parent   //繼承自父類,默認爲private繼承
{

};

注意:
  繼承時的訪問級別設定會影響到成員的訪問級別

  • C++中class的繼承默認爲private繼承
  • private繼承的子類擁有父類的所有成員
  • private繼承使得父類的所有成員在子類中變爲private成員

2、C++中的訪問級別與繼承

  • public繼承
    • 父類成員在子類中保持原有訪問級別
  • private繼承
    • 父類成員在子類中變爲private成員
  • protected繼承
    • 父類的private和protected成員在子類中保持不變
    • 父類的public成員在子類中變爲protected

修改上面的程序,在子類中添加新函數,如下:

class Child : Parent   //繼承自父類
{
  void func()
  {
    a = 10;
    cout << "a = " << a << endl;
  }
};

嘗試編譯運行程序,會得到一些錯誤:
這裏寫圖片描述

編譯器告訴我們,父類中的a成員變量是私有的,在子類中無法被訪問!

那麼問題來了?如果想要一個成員變量在外界不能被訪問,但是在其類中和其子類中都可以被訪問,該怎麼辦?

新的成員修飾符:protected 受保護成員

 - protected成員可以在子類中被訪問,但不能在外界被訪問
 - protected成員的訪問權限介於public和private之間

思考:
如何恰當的使用public,protected和private爲成員聲明訪問級別??

類成員訪問級別設置的原則

  • 需要被外界訪問的成員直接設置爲public
  • 只能在當前類中訪問的成員設置爲private
  • 只能在當前類和子類中訪問的成員設置爲protected

注意:
  private成員在子類中依然存在,但是卻無法訪問到。

3、繼承與訪問級別

父類的成員訪問級別和子類的繼承級別,共同決定了這些成員在子類中的訪問級別,該訪問級別有如下的公式:

公式:
繼承成員對外的訪問屬性
= Max{ 繼承方式, 父類成員訪問級別 }

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章