[問題] 請問在c語言virtual的函義是什麼?

看板C_and_CPP作者 (研發替代役 GOGO)時間14年前 (2012/02/07 17:28), 編輯推噓7(7022)
留言29則, 12人參與, 最新討論串1/1
如題, virtual函義是什麼? 我查奇摩知識或google都還是看不太懂= =" 我只知類別用到繼承時, 子類別和父類別一樣,要宣告成virtual void(); -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.14.206

02/07 17:38, , 1F
c沒有virtual阿...
02/07 17:38, 1F

02/07 17:46, , 2F
是c++吧XD virtual用在父、子類別有一個同名的member func.
02/07 17:46, 2F

02/07 17:47, , 3F
詳細情形還是翻書 比較容易理解 板上應該有神人可以提例子
02/07 17:47, 3F

02/07 17:48, , 4F
不過大量使用virtual 會使記憶體使用量上升 要注意~~
02/07 17:48, 4F

02/07 17:55, , 5F
#1BK8p46C 以前寫的
02/07 17:55, 5F

02/07 18:00, , 6F
推一下 james那篇 執行過後會比較了解精隨所在
02/07 18:00, 6F

02/07 18:00, , 7F
板上應該有更好的文章,不過我一時找不到...XD
02/07 18:00, 7F

02/07 18:01, , 8F
你的父,子類別是is a A的關係,當父類別的成員函數子類別繼
02/07 18:01, 8F

02/07 18:02, , 9F
承時,如果實作上要做修改,要把成員函數宣告成virtual
02/07 18:02, 9F

02/07 18:03, , 10F
反之不用 我映像中是這樣,不知有沒有錯
02/07 18:03, 10F

02/07 18:04, , 11F
要把父類別的函式宣告成virtual (幫補正)
02/07 18:04, 11F

02/07 18:05, , 12F
      ^成員
02/07 18:05, 12F

02/07 18:07, , 13F
多型的意義可以看這篇 #1Ar_jTzE
02/07 18:07, 13F

02/07 18:29, , 14F
james大 多型那篇 衍生類別也需要加嗎?
02/07 18:29, 14F

02/07 19:26, , 15F
W大,為何virtual會造成記憶體增加?
02/07 19:26, 15F

02/07 19:28, , 16F
我習慣在super跟sub class都會加上virtual,這樣清楚
02/07 19:28, 16F

02/07 20:14, , 17F
virtual function tables會造成時間跟空間的浪費
02/07 20:14, 17F

02/07 20:28, , 18F
這我倒是沒有想過,這是因為virtual實作的原因?
02/07 20:28, 18F

02/07 20:35, , 19F
實作沒問題的話,空間不會浪費多少啦...
02/07 20:35, 19F

02/07 21:32, , 20F
一個function 4byte 是多還少就要視狀況而定了
02/07 21:32, 20F

02/07 21:44, , 21F
可以整個程式共享...
02/07 21:44, 21F

02/07 22:00, , 22F
一個virtual function相當於一個static member
02/07 22:00, 22F

02/07 22:03, , 23F
記憶體不夠的話都是先從其他地方下手啦
02/07 22:03, 23F

02/07 22:03, , 24F
我還沒聽過先從virtual function下手的例子
02/07 22:03, 24F

02/07 23:19, , 25F
我是覺得virtual的優點遠勝於缺點 就不用怕的用吧
02/07 23:19, 25F

02/07 23:22, , 26F
據說MFC架構會搞得那麼複雜,特別是大量的巨集,就是想
02/07 23:22, 26F

02/07 23:22, , 27F
避免virtual的overhead。不過現在應該不必計較這個了
02/07 23:22, 27F

02/19 14:19, , 28F
請問#1BK8p46C 這篇要怎麼找? 我只會用a和/找作者和標題= =
02/19 14:19, 28F

02/20 23:13, , 29F
就在文章列表把 #1BK8p46C (從#到C都要) 貼上就行了:)
02/20 23:13, 29F
文章代碼(AID): #1FCEwequ (C_and_CPP)