[爆卦]c# abstract class用法是什麼?優點缺點精華區懶人包

為什麼這篇c# abstract class用法鄉民發文收入到精華區:因為在c# abstract class用法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者crazycat2 (浪無定所)看板C_and_CPP標題[問題] C++、C#,的介面、抽象類...


不好意思,因為不太熟稔這兩種語言
想請教有關C++、C#的差別


‧抽象類別(abstract class)
C++:Class中只要包含純虛擬涵式(pure virtual)都是:
只能繼承、不得實體化、可實做部分、可包含建構式?
一個類別可繼承多個

C#:使用abstract:
只能繼承、不得實體化、可實做部分、可包含建構式?
一個類別只能繼承一個抽象類別

‧介面
C++:沒有
C#:使用interface:
不能實體化、不能有建構式、不得實做類別。
一個類別可繼承多個介面


請問是否常說C++的介面,其實就是C++的抽象類別?
C#的抽象類別 與 C++的抽象類別,是否僅有繼承數量的差別?

謝謝各位了

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.70.168.153
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1417939914.A.9C9.html
carylorrk: 通常講到 interface 會是指只有 pure virtual function 12/07 16:41
carylorrk: 的 class,不過跟 C#/Java 的 interface 還是完全不同 12/07 16:42
謝謝cary大的回應,我又冒出了其他的問題..

C++ interface :
定義:只是口語上的用法,其實還是抽象類別
方式:使用抽象類別,但只包含純pure virtual function

Q:那這時候還需要virtual解構式嗎?如此抽象類別,全部都是pure virtual function。
※ 編輯: crazycat2 (203.70.168.153), 12/07/2014 17:04:34
carylorrk: 要,基本上所有 base class 可能都需要。重點不在於 12/07 17:25
carylorrk: base class 的成員,而是在 polymorphism 時正確利用到 12/07 17:27
carylorrk: inheritance hierarchy 中的 destructor 12/07 17:29
crazycat2: 真的謝謝了。 12/07 17:38
tinlans: 如果是實現 strategy pattern,你的 concrete strategy 12/07 19:45
tinlans: 本身不帶狀態,其實也是可以不用 virtual dtor 的。 12/07 19:46
tinlans: 不過這樣寫很吃編譯器實作,標準是說你用到多型導致動態 12/08 17:37
tinlans: 跟靜態型別不同,靜態型別無 virtual dtor 又對靜態型別 12/08 17:38
tinlans: 的 pointer 做 delete 就是 undefined behavior。 12/08 17:38
crazycat2: 謝謝T大的解釋,我會重複想一下的。 12/08 22:16

你可能也想看看

搜尋相關網站