[问题] 两题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