[問題] 兩題C++面試題的詢問

作者: Cosmology (宇宙學型男)   2018-04-03 11:52:36
先說是面試題 所以會有一些奇怪的寫法
晚輩還是剛入行的新人 若有冒犯 請見諒
1.
class A
{
public:
virtual void foo(int a = 0)
{
printf("A %d\n", a);
}
};
class B : public A
{
public:
virtual void foo(int a = 1)
{
printf("B %d\n", a);
}
};
A *p = new B();
p->foo();
我答結果是 B 1
面試官說你回去試試看 結果回家測試的結果是 B 0
我可以理解virtual function的用法
但是唯獨那個a我並不能理解為什麼是0...
2.
struct test
{
int a;
char b;
short c;
double d;
char e;
};
test這個大小是多少?
我可以理解關於記憶體對齊的問題
所以我答總共是24 bytes
面試官接著問為什麼是24 以及那他們在系統內的記憶體位置是如何?
我回答
int 4
char 4(對齊後)
short 4(對齊後)
double 8
char 4(對齊後)
所以總共是24 (我的概念可能有錯...)
他說24是對的 但是位置的概念不正確 叫我回去測試看看
我回家測試(以下都起始位置)
a 9435088
b 9435092
c 9435094
d 9435096
e 9435104
我理解可能char short那邊可能答錯了
但是即便是這樣 e那個位置對齊以後末三碼應該是108
88到108應該也是20個bytes阿...
有前輩可以指點我哪裡概念有錯誤嗎?
或是能夠提供方向讓我找資料 謝謝
作者: bluesoul (忙死你老爸)   2018-04-03 12:00:00
因為virtual function default parameter是看你怎樣呼叫https://goo.gl/XtGJjV
作者: Caesar08 (Caesar)   2018-04-03 12:03:00
第二個可以google intel data alignment and structure
作者: bluesoul (忙死你老爸)   2018-04-03 12:03:00
第二點是我們不知道實際上會怎樣被放
作者: Caesar08 (Caesar)   2018-04-03 12:11:00
對,但是不知道為甚麼,面試都很愛考這個
作者: stupid0319 (徵女友)   2018-04-03 14:06:00
錄取了嗎?
作者: dzwei (Cout<< *p << \n ;)   2018-04-03 15:34:00
第一題effective c++有我記得是給初始值之後的virtual func就會變成靜態綁定了所以實作上用virtual func根本不可以給parmeter的預設值
作者: super6602 (Ace)   2018-04-03 20:42:00
第二題還是看complier 看cpu怎麼fetch最快
作者: kyushu (蘇打綠嚇倒我了)   2018-04-03 21:12:00
搞不懂考這種特例的用意是什麼?
作者: ilikekotomi (Young)   2018-04-03 22:55:00
第一題 剛剛回去翻Effective C++ 在37條
作者: plsmaop (plsmaop)   2018-04-04 10:37:00
https://en.m.wikipedia.org/wiki/Data_structure_alignment維基說整個大小會是最大的type的倍數所以這個例子是double的8byte乘上3,變成24
作者: s0914714 (YA)   2018-04-04 13:15:00
alignment跟compiler有關 不同compiler有可能不同大小原PO回答也沒錯阿 以4byte當alignment就是這種情形alignment主要是考量到效率以及有些架構如果沒有對齊會有fault 所以可能的情形會很多XD
作者: brighton16 (Alliz well)   2018-04-04 22:13:00
考試喜歡考沒多大用處的特例,可以顯示出題人的優越感

Links booklink

Contact Us: admin [ a t ] ucptt.com