繼承是使**可以復用的重要手段,也是物件導向程式設計的核心思想之一。簡單的說,繼承是指乙個物件直接使用另一物件的屬性和方法。繼承呈現了 物件導向程式設 計的層次結構, 體現了 由簡單到複雜的認知過程。c++中的繼承關係就好比現實生活中的父子關係,繼承一筆財產比白手起家要容易得多,原始類稱為基類,繼承類稱為派生類,它們是類似於父親和兒子的關係,所以也分別叫父類和子類。而子類又可以當成父類,被另外的類繼承。繼承的方式有三種分別為公有繼承(public),保護繼承(protect),私有繼承(private)。
定義格式如下:
(1) 公有繼承(public)
公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。
(2)私有繼承(private)
私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。
(3)保護繼承(protected)
保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。
private能夠對外部和子類保密,即除了成員所在的類本身可以訪問之外,別的都不能直接訪問。protected能夠對外部保密,但允許子類直接訪問這些成員。public、private和protected對成員資料或成員函式的保護程度可以用下表來描述:
舉個栗子:
class base //父類
;class derived: public base //子類,繼承自base,繼承型別為公有繼承
int _d_pub;
} ;總結:(1). public繼承是乙個介面繼承,保持is-a原則,每個父類可用的成員對子類也可用, 因為每個子類物件也都是乙個父類物件。
class c :private base //基類base的派生類c(私有繼承)
};class e :protected base //基類base的派生類e(保護繼承)
};總結:
(2). 基類的private成員 在派生類中是不能被訪問的, 如果基類成員 不想在類外直接被訪問, 但需要 在派生類中能訪問, 就定義為protected。 可以看出保護成員 限定符是因繼承才出現的。
(3). protected/private繼承是乙個實現繼承, 基類的部分成員 並非完全成為子類介面 的一部分, 是 has-a 的關係原則, 所以非特殊情況下不會使用這兩種繼承關係, 在絕大多數的場景下使用的 都是公有繼承。 私有繼承以為這is-implemented-in-terms-of(是根據……實現的) 。 通常比組合(composition) 更低階, 但當乙個派生類需要訪問 基類保護成員 或需要重定義基類的虛函式時它就是合理的。
int main()
(4). 不管是哪種繼承方式, 在派生類內部都可以訪問基類的公有成員和保護成員 , 基類的私有成員存在但是在子類中不可見( 不能訪問) 。
(5). 使用關鍵字class時預設的繼承方式是private, 使用struct時預設的繼承方式是public, 不過最好顯式的寫出繼承方式。
(6). 在實際運用中一般使用都是public繼承, 極少場景下才會使用protetced/private繼承。
在struct繼承中,如果沒有顯式給出繼承型別,則預設的為public繼承;在class繼承中,如果沒有顯式給出繼承型別,則預設的為private繼承;
繼承關係&訪問限定符
C 的繼承(三種繼承方式)
1.類的3種成員型別 2.三種繼承方式 1.類的三種成員型別 如圖所示 public protected private 三種成員型別,當沒表明型別的時候,預設是private的。類外部的意思是 main 函式啊,或者定義全域性變數的外部空間啊,其他類空間。如 下面的 是出錯的,因為a類的b變數是p...
C 三種繼承方式
公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 2.私有繼承 private 私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。3.保護繼承 protected 保護繼承...
C 三種繼承方式
繼承是使 可以復用的重要手段,也是物件導向程式設計的核心思想之一。簡單的說,繼承是指乙個物件直接使用另一物件的屬性和方法。繼承呈現了 物件導向程式設 計的層次結構,體現了 由簡單到複雜的認知過程。c 中的繼承關係就好比現實生活中的父子關係,繼承一筆財產比白手起家要容易得多,原始類稱為基類,繼承類稱為...