作者Cosmology (宇宙学型男)
看板C_and_CPP
标题[问题] 两题C++面试题的询问
时间Tue Apr 3 11:52:36 2018
先说是面试题 所以会有一些奇怪的写法
晚辈还是刚入行的新人 若有冒犯 请见谅
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阿...
有前辈可以指点我哪里概念有错误吗?
或是能够提供方向让我找资料 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 136.60.160.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1522727559.A.A71.html
1F:→ bluesoul: 因为virtual function default parameter是看你怎样呼叫 04/03 12:00
3F:→ Caesar08: 第二个可以google intel data alignment and structure 04/03 12:03
4F:→ bluesoul: 第二点是我们不知道实际上会怎样被放 04/03 12:03
5F:→ Caesar08: 对,但是不知道为甚麽,面试都很爱考这个 04/03 12:11
6F:→ stupid0319: 录取了吗? 04/03 14:06
7F:推 dzwei: 第一题effective c++有 04/03 15:34
8F:→ dzwei: 我记得是给初始值之後的virtual func 04/03 15:34
9F:→ dzwei: 就会变成静态绑定了 04/03 15:34
10F:→ dzwei: 所以实作上用virtual func 04/03 15:39
11F:→ dzwei: 根本不可以给parmeter的预设值 04/03 15:39
12F:推 super6602: 第二题还是看complier 看cpu怎麽fetch最快 04/03 20:42
13F:推 kyushu: 搞不懂考这种特例的用意是什麽? 04/03 21:12
14F:推 ilikekotomi: 第一题 刚刚回去翻Effective C++ 在37条 04/03 22:55
16F:→ plsmaop: ent 04/04 10:37
17F:→ plsmaop: 维基说整个大小会是最大的type的倍数 04/04 10:37
18F:→ plsmaop: 所以这个例子是double的8byte乘上3,变成24 04/04 10:38
19F:推 s0914714: alignment跟compiler有关 不同compiler有可能不同大小 04/04 13:15
20F:推 s0914714: 原PO回答也没错阿 以4byte当alignment就是这种情形 04/04 13:45
21F:推 s0914714: alignment主要是考量到效率以及有些架构如果没有对齐 04/04 13:50
22F:→ s0914714: 会有fault 所以可能的情形会很多XD 04/04 13:50
23F:推 brighton16: 考试喜欢考没多大用处的特例,可以显示出题人的优越感 04/04 22:13
24F:推 Philethan: 推推 07/08 15:42