作者legnaleurc (CA)
看板Programming
標題Re: C++ overriding/overriding的問題
時間Wed Feb 13 16:52:01 2008
※ 引述《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
1F:→ adrianshum:virtual inheritence 反而變大? 202.155.236.82 02/13 16:54
2F:→ adrianshum:還是你指的是有 method 是 virtual? 202.155.236.82 02/13 16:56
3F:→ adrianshum:static 是 1 很正常因為 int 不是 202.155.236.82 02/13 16:56
4F:→ adrianshum:instance var 而是 class var 202.155.236.82 02/13 16:57
5F:→ legnaleurc:對,就是virtual inheritence 211.74.131.219 02/13 16:56
6F:→ ya790206:虛擬計程真的變大,DevC++跟VC++2005 59.116.135.217 02/13 16:56
7F:→ legnaleurc:use gcc 4.1.2 211.74.131.219 02/13 16:57
8F:→ legnaleurc:但是class B也變成1就說不過去了 211.74.131.219 02/13 16:58
9F:推 adrianshum:virtual繼承和一般主要分別不是指多個 202.155.236.82 02/13 17:00
10F:→ legnaleurc:畢竟B還是有一般成員變數啊 211.74.131.219 02/13 17:00
11F:→ adrianshum:同樣的 base class instance 只會出現 202.155.236.82 02/13 17:00
12F:→ adrianshum:在本身一次嘛? 理應只會小不會大哩, 還 202.155.236.82 02/13 17:01
13F:→ adrianshum:是要逹到這個有特別的 overhead? 202.155.236.82 02/13 17:01
14F:→ adrianshum:legnaleurc: 1 沒有問題吧? 裡面沒東西 202.155.236.82 02/13 17:01
15F:→ adrianshum:不是 1 該是什麼 ? o_oa 202.155.236.82 02/13 17:02
16F:→ legnaleurc:不會連vt也算在sizeof裡吧? 211.74.131.219 02/13 17:02
17F:→ legnaleurc:A有一個static int x 211.74.131.219 02/13 17:02
18F:→ legnaleurc:啊啊,我好像了解了....所以static不會 211.74.131.219 02/13 17:03
19F:→ legnaleurc:使用多餘的空間 211.74.131.219 02/13 17:04
20F:→ legnaleurc:我原本認為是1 2,就是會再加上B 211.74.131.219 02/13 17:04
21F:推 adrianshum:vt 當然有算在 sizeof 的 202.155.236.82 02/13 17:06
22F:推 saladim:虛擬繼承會多出一個指標122.116.230.132 02/15 20:39
23F:→ saladim:指向virtual table, 請參閱C++的書籍122.116.230.132 02/15 20:39
24F:→ saladim:static的member不算入class大小122.116.230.132 02/15 20:41