繼承修飾符public、private、protected

 1.   private:只能由1.該類中的函數、2.其友元函數訪問。不能被任何其他訪問,該類的對象也不能訪問。

 2.   protected:可以被1.該類中的函數、2.子類的函數、以及3.其友元函數訪問。但不能被該類的對象訪問。

 3.   public:可以被1.該類中的函數、2.子類的函數、3.其友元函數訪問,也可以由4.該類的對象訪問。

 4.   注:友元函數包括3種:設爲友元的普通的非成員函數;設爲友元的其他類的成員函數;設爲友元類中的所有成員  函數。

        另外:類的繼承後方法屬性變化。

 5.   private 屬性不能夠被繼承。使用private繼承,父類的protected和public屬性在子類中變爲private;

 6.   使用protected繼承,父類的protected和public屬性在子類中變爲protected;

 7.   使用public繼承,父類中的protected和public屬性不發生改變; 

 8.   如下所示:               

   public:      protected:   private:
public繼承  public   protected 不可用 
protected繼承  protected    protected    不可用 
 private繼承   private      private   不可用 


12.    protected繼承和private繼承能降低訪問權限。


       而在C++中繼承主要有三種關係:publicprotectedprivate。這三種繼承關係中public繼承是最爲常用的一種繼承關係,private繼承是最少見的繼承關係。

1. public

        public繼承是一種接口繼承,根據面向對象中的關係而言就是,派生類可以代替基類完成基類接口所聲明的行爲.

從語法角度上來說,public繼承會保留基類中成員(包括函數和變量等)的可見性不變,也就是說,基類的public成員爲派生類的public成員,基類的protected成員爲派生類的protected成員。

2. protected

        從語義角度上來說,protected繼承是一種實現繼承。

從語法角度上來說,protected繼承會將基類中的public可見性的成員修改成爲protected可見性,相當於在派生類中引入了protected成員,這樣一來在派生類中同樣還是可以調用基類的protected和public成員,派生類的派生類就也可以調用被protected繼承的基類的protected和public成員。

例如:
  

class CSample1 {
protected:
    void printProtected() {}
public:
void printPublic() {}
};
class CSample2 : protected CSample1 {};
class CSample3 : public CSample2 {
   void print3() {
      printProtected();
      printPublic();
}
};
3. private
        從語義角度上來說,private繼承是一種實現繼承,private繼承會將基類中的public和protected可見性的成員修改成爲private可見性,這樣一來雖然派生類中同樣還是可以調用基類的protected和public成員,但是在派生類的派生類就不可以再調用被private繼承的基類的成員了。
class CSample1 {
protected:
  void printProtected() {}
public:
  void printPublic() {}
};
class CSample2 : private CSample1 {};
class CSample3 : public CSample2 {
  void print3() {
    printProtected(); // 編譯錯誤,不可以調用該函數
    printPublic();    // 編譯錯誤,不可以調用該函數
  }
};


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