公有繼承時,派生類的物件可以作為基類的物件處理,派生類是基類的子型別。
子型別關係使得在需要基類物件的任何地方都可以使用公有派生類的物件來替代,從而可以使用相同的函式統一處理基類物件和公有派生類物件(形參為基類物件時,實參可以是派生類物件),大大提高了程式的效率。子型別關係是實現多型性的重要基礎之一。
子型別關係定義:
#有乙個特定的型別s,當且僅當它提供型別t的行為時,稱型別s是型別t的子型別。公有繼承方式可以實現子型別關係,即派生類s是基類t的子型別。
示 例:
class base
{public:
void print()const{cout<<"base::print()"<
注:子型別關係具有傳遞性。子型別關係可以傳遞,但是不可逆。
公有繼承可以實現子型別關係。通過公有繼承,派生類得到了基類中除了建構函式、析構函式之外的所有成員,而且可訪問成員的訪問控制屬性也和基類完全相同。這樣,派生類物件就可以作為基類的物件使用,但它只能使用從基類繼承的成員。
具有子型別關係的基類和派生類的物件之間滿足如下賦值相容規則:
(1)公有派生類的物件可以賦值給基類的物件,即用公有派生類物件中從基類繼承來的成員,逐個賦值給基類物件的成員。
例: derived d;
base b;
b=d;
(2)公有派生類的物件可以初始化基類的引用。
例: derived d;
base &ref=d;
(3)公有派生類的物件的位址可以賦值給指向基類的指標。
例: derived d;
base *ptr=&d;
python 子類關係
說明 python為所有類提供乙個 bases 屬性,通過該屬性可以檢視該類的所有直接父類,該屬性返回所有直接父類組成的元組 python為所有類提供了乙個 subclasses 方法,通過該方法可以檢視該類的所有直接子類,該方法返回該類的所有子類組成的列表 子類繼承父類的私有方法重寫無效,公有方法...
C 父類與子類的關係
這裡,我做乙個整合。這裡前期要極其注意修飾符之間的關係。1.main呼叫方法,其實我也不知道叫什麼,大家看 吧。using system using system.collections.generic using system.linq using system.text using system...
C 子類父類建構函式的關係
構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承 子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法 因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅...