Re: C++ overriding/overriding的問題

看板Programming作者 (CA)時間18年前 (2008/02/13 16:52), 編輯推噓3(3021)
留言24則, 4人參與, 最新討論串5/8 (看更多)
※ 引述《ya790206 (殘雲奪月)》之銘言: 恕刪 : 結果是4 8 : 為何是八之前有人問過,不過我不懂 : DevC++的結果 我認為它的sizeof的計算方式很有趣 我把B改成虛擬繼承A,印出來就變成4 12 然後如果A的x是static int 印出來會變成1 1 不知道是怎麼算的 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.131.219

02/13 16:54, , 1F
virtual inheritence 反而變大?
02/13 16:54, 1F

02/13 16:56, , 2F
還是你指的是有 method 是 virtual?
02/13 16:56, 2F

02/13 16:56, , 3F
static 是 1 很正常因為 int 不是
02/13 16:56, 3F

02/13 16:57, , 4F
instance var 而是 class var
02/13 16:57, 4F

02/13 16:56, , 5F
對,就是virtual inheritence
02/13 16:56, 5F

02/13 16:56, , 6F
虛擬計程真的變大,DevC++跟VC++2005
02/13 16:56, 6F

02/13 16:57, , 7F
use gcc 4.1.2
02/13 16:57, 7F

02/13 16:58, , 8F
但是class B也變成1就說不過去了
02/13 16:58, 8F

02/13 17:00, , 9F
virtual繼承和一般主要分別不是指多個
02/13 17:00, 9F

02/13 17:00, , 10F
畢竟B還是有一般成員變數啊
02/13 17:00, 10F

02/13 17:00, , 11F
同樣的 base class instance 只會出現
02/13 17:00, 11F

02/13 17:01, , 12F
在本身一次嘛? 理應只會小不會大哩, 還
02/13 17:01, 12F

02/13 17:01, , 13F
是要逹到這個有特別的 overhead?
02/13 17:01, 13F

02/13 17:01, , 14F
legnaleurc: 1 沒有問題吧? 裡面沒東西
02/13 17:01, 14F

02/13 17:02, , 15F
不是 1 該是什麼 ? o_oa
02/13 17:02, 15F

02/13 17:02, , 16F
不會連vt也算在sizeof裡吧?
02/13 17:02, 16F

02/13 17:02, , 17F
A有一個static int x
02/13 17:02, 17F

02/13 17:03, , 18F
啊啊,我好像了解了....所以static不會
02/13 17:03, 18F

02/13 17:04, , 19F
使用多餘的空間
02/13 17:04, 19F

02/13 17:04, , 20F
我原本認為是1 2,就是會再加上B
02/13 17:04, 20F

02/13 17:06, , 21F
vt 當然有算在 sizeof 的
02/13 17:06, 21F

02/15 20:39, , 22F
虛擬繼承會多出一個指標
02/15 20:39, 22F

02/15 20:39, , 23F
指向virtual table, 請參閱C++的書籍
02/15 20:39, 23F

02/15 20:41, , 24F
static的member不算入class大小
02/15 20:41, 24F
文章代碼(AID): #17ig-qDD (Programming)
討論串 (同標題文章)
文章代碼(AID): #17ig-qDD (Programming)