c# 中,可以如下定義:
base father = new derived();
father 是基類引用,指向子類物件,這一點有點類似c++。
該引用的使用模式如下(先說結論)——
測試**如下:
usingview codelogging;
class
base
public
virtual
void
show2()
public
void myself()
}class
derived: base
public
void show2()
public
void show3()
public
void myself()
static
void
main()
}
編譯 derived father:
$ csc tryit.cs編譯 base father (已注釋 t.show3() 呼叫,否則編譯失敗):microsoft(r) visual c# 編譯器 版本 2.9.0.63208 (958f2354)
tryit.cs(22,17): warning cs0114: '「derived.show2()」隱藏繼承的成員「base.show2()」。若要使當前成員重寫該實現,請新增關鍵字 override。否則,新增關鍵字 new。
tryit.cs(30,17): warning cs0108: '「derived.myself()」隱藏繼承的成員「base.myself()」。如果是有意隱藏,請使用關鍵字 new。
method of derived::show()
method of derived::show2()
a new method of derived::show3()
method of derived::myself()
$ csc tryit.cs -define:base對於 base father = new derived() 的形式來說,似乎是一種新老結合的方式:對於virtual方法,可以自動追尋子類的實現,而非virtual則根據base型別決定。microsoft(r) visual c# 編譯器 版本 2.9.0.63208 (958f2354)
tryit.cs(22,17): warning cs0114: '「derived.show2()」隱藏繼承的成員「base.show2()」。若要使當前成員重寫該實現,請新增關鍵字 override。否則,新增關鍵字 new。
tryit.cs(30,17): warning cs0108: '「derived.myself()」隱藏繼承的成員「base.myself()」。如果是有意隱藏,請使用關鍵字 new。
method of derived::show()
method of base::show2()
method of base::myself()
實際上,這個模式與c++完全相同,測試**如下:
//view codeg++ ctry.cpp -std=c++11
#include class
base
virtual
void
show2()
void myself()
};class derived: public
base
void show2()
void
show3()
void
myself()
};int
main()
編譯,執行:
$ g++ ctry.cpp -std=c++11# 請忽視 c# 對show2() 的呼叫,那裡本應該寫乙個override的~$ ./a.exe
method of derived::show()
method of derived::show2()
method of base::myself()
關於C 繼承與多型的思考
在網上看到了一句話 繼承是子類使用父類的方法,而多型則是父類使用子類的方法。我覺得這句話說的還是蠻不錯的 c 中的繼承符合下列規則 1 繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object 類作為所有類的基類。2 派生類 子類 應當是...
C 中模板與多型的思考
開發中遇到個問題,問題如下 有7中型別的資訊,每個型別有相同的地方,也有不用之處,但是類內函式都一樣。最開始考慮用模板實現,因為類內函式一樣,於是寫完,編譯,報錯,查問題。發現模板函式不能在cpp檔案中實現,要將實現與定義都放在.h檔案中。為什麼?這是因為 模板例項化是發生在編譯期 compile ...
關於C 多型的學習
父類virtual type funcname arg 子類type funcname arg type funcname arg完全一致就算子類重寫了。覆蓋了基類的func。還可以 子類直接寫個override example type funcname arg override 這個是c 11的...