看板 C_and_CPP 關於我們 聯絡資訊
不好意思,因為不太熟稔這兩種語言 想請教有關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