C 中父類與子類的繼承關係

2021-09-08 14:18:27 字數 1567 閱讀 7691

c#中的父類與子類的繼承關係與c和c++中的類似,這裡先闡述最重要的一點:假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯;但是父類強制轉換成子類的時候,編譯可以通過執行通不過。請看如下**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace fatherandson

}class classb : classa

}

實際上:將子類強制轉換為父類之後,在用這個父類強制轉換為另外乙個子類的時候編譯和執行也都能通過;只是如果將父類直接轉換為子類的時候執行會出錯。這就好比:假設父類是乙個裝了5個「蘋果」的「小型籃子」,而子類則是乙個裝了5個「蘋果」和5個」西瓜「的大型籃子;將子類強制轉換為父類<=>把父類的」小型籃子「換成」大型籃子「,但還是只裝5個」蘋果「(將父類的引用指向子類,但父類只能呼叫父子自身的變數和方法),之後再用這個父類強制轉換為另外乙個子類<=>向」大型籃子「裡面裝入5個」西瓜「送給子類的引用;而將父類直接轉換為子類<=>用父類的」小型籃子「裝」5個蘋果和5個西瓜「送給子類的引用(當然是裝不下)請看如下**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace fatherandson

}class classa

class classb : classa

}

另外乙個值得非常注意的地方是:無論是子類強制轉換賦給父類,還是父類(由子類強轉得到)強制轉換為子類;類物件是根據宣告的型別(子類或父類)去呼叫其變數和函式的,與賦值無關。請看如下**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace fatherandson

}class classa

public void printfunc()

}class classb : classa

public void printfunc()

}}

上面**輸出的結果為:

this is the print function in classb

hello, this is mystr in classb

this is the print function in classa

hello, this is mystr in classa

this is the print function in classb

hello, this is mystr in classb

可以看出:類的例項物件在呼叫其變數和方法時,確實是以 宣告 成為的類為依據的。

C 中父類與子類的繼承關係

c 中的父類與子類的繼承關係與c和c 中的類似,這裡先闡述最重要的一點 假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯 但是父類強制轉換成子類的時候,編譯可以通過執行通不過。請看如下 using system using system.collections.generi...

c 父類與子類間的繼承關係

父類與子類的相互轉換 1 派生類的物件可以賦給基類,反之不行 2 基類的指標可以指向派生類,反之不行 3 基類的引用可以初始化為派生類的物件,反之不行 4 派生類指標必須強制轉換為基類指標後才可以指向基類 5 基類指標轉換為派生類指標容易導致崩潰性錯誤 6 虛基類的引用或派生不能轉換為派生類 cla...

關於父類子類繼承關係

一.繼承 子類可以直接復用父類中的成員.子類繼承父類所有方法的宣告和實現 非私有的例項變數以及協議 繼承時要在.h中宣告一下 繼承具有單根性和傳遞性 繼承的根類 大多都繼承自 nsobject 類,所以在定義乙個類時,要繼承nsobject 類。繼承就是 優化公共部分交給父類 例如 person是父...