先說是面試題 所以會有一些奇怪的寫法
晚輩還是剛入行的新人 若有冒犯 請見諒
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阿...
有前輩可以指點我哪裡概念有錯誤嗎?
或是能夠提供方向讓我找資料 謝謝