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

看板C_and_CPP作者 (浪無定所)時間9年前 (2014/12/07 16:11), 9年前編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/1
不好意思,因為不太熟稔這兩種語言 想請教有關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

12/07 16:41, , 1F
通常講到 interface 會是指只有 pure virtual function
12/07 16:41, 1F

12/07 16:42, , 2F
的 class,不過跟 C#/Java 的 interface 還是完全不同
12/07 16:42, 2F
謝謝cary大的回應,我又冒出了其他的問題.. C++ interface : 定義:只是口語上的用法,其實還是抽象類別 方式:使用抽象類別,但只包含純pure virtual function Q:那這時候還需要virtual解構式嗎?如此抽象類別,全部都是pure virtual function。 ※ 編輯: crazycat2 (203.70.168.153), 12/07/2014 17:04:34

12/07 17:25, , 3F
要,基本上所有 base class 可能都需要。重點不在於
12/07 17:25, 3F

12/07 17:27, , 4F
base class 的成員,而是在 polymorphism 時正確利用到
12/07 17:27, 4F

12/07 17:29, , 5F
inheritance hierarchy 中的 destructor
12/07 17:29, 5F

12/07 17:38, , 6F
真的謝謝了。
12/07 17:38, 6F

12/07 19:45, , 7F
如果是實現 strategy pattern,你的 concrete strategy
12/07 19:45, 7F

12/07 19:46, , 8F
本身不帶狀態,其實也是可以不用 virtual dtor 的。
12/07 19:46, 8F

12/08 17:37, , 9F
不過這樣寫很吃編譯器實作,標準是說你用到多型導致動態
12/08 17:37, 9F

12/08 17:38, , 10F
跟靜態型別不同,靜態型別無 virtual dtor 又對靜態型別
12/08 17:38, 10F

12/08 17:38, , 11F
的 pointer 做 delete 就是 undefined behavior。
12/08 17:38, 11F

12/08 22:16, , 12F
謝謝T大的解釋,我會重複想一下的。
12/08 22:16, 12F
文章代碼(AID): #1KX0lAd9 (C_and_CPP)