先说是面试题 所以会有一些奇怪的写法
晚辈还是刚入行的新人 若有冒犯 请见谅
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阿...
有前辈可以指点我哪里概念有错误吗?
或是能够提供方向让我找资料 谢谢