[問題] C++、C#,的介面、抽象類別

作者: crazycat2 (浪無定所)   2014-12-07 16:11:52
不好意思,因為不太熟稔這兩種語言
想請教有關C++、C#的差別
‧抽象類別(abstract class)
C++:Class中只要包含純虛擬涵式(pure virtual)都是:
只能繼承、不得實體化、可實做部分、可包含建構式?
一個類別可繼承多個
C#:使用abstract:
只能繼承、不得實體化、可實做部分、可包含建構式?
一個類別只能繼承一個抽象類別
‧介面
C++:沒有
C#:使用interface:
不能實體化、不能有建構式、不得實做類別。
一個類別可繼承多個介面
請問是否常說C++的介面,其實就是C++的抽象類別?
C#的抽象類別 與 C++的抽象類別,是否僅有繼承數量的差別?
謝謝各位了
作者: carylorrk (carylorrk)   2014-12-07 16:41:00
通常講到 interface 會是指只有 pure virtual function的 class,不過跟 C#/Java 的 interface 還是完全不同要,基本上所有 base class 可能都需要。重點不在於base class 的成員,而是在 polymorphism 時正確利用到inheritance hierarchy 中的 destructor
作者: crazycat2 (浪無定所)   2014-12-07 17:38:00
真的謝謝了。
作者: tinlans ( )   2014-12-07 19:45:00
如果是實現 strategy pattern,你的 concrete strategy本身不帶狀態,其實也是可以不用 virtual dtor 的。不過這樣寫很吃編譯器實作,標準是說你用到多型導致動態跟靜態型別不同,靜態型別無 virtual dtor 又對靜態型別的 pointer 做 delete 就是 undefined behavior。
作者: crazycat2 (浪無定所)   2014-12-08 22:16:00
謝謝T大的解釋,我會重複想一下的。

Links booklink

Contact Us: admin [ a t ] ucptt.com