20180315 代码错题(12)
观察下面一段代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class ClassA { public: virtual ~ ClassA(){}; virtual void FunctionA(){}; }; class ClassB { public: virtual void FunctionB(){}; }; class ClassC : public ClassA,public ClassB { public: }; ClassC aObject; ClassA* pA=&aObject; ClassB* pB=&aObject; ClassC* pC=&aObject; |
关于pA,pB,pC的取值,下面的描述中正确的是:
pA,pB,pC的取值相同.
pC=pA+pB
pA和pB不相同
pC不等于pA也不等于pB
答案 C
注意到题目中class ClassC : public ClassA,public ClassB,即A在前,B在后,所以
如果我们输出三个指针的值。
上面的代码在我的电脑上输出
0x7fff502f5aa80x7fff502f5ab0
0x7fff502f5aa8
可以看到pA和pC是相同的。
所以选择C。
实际上,在这个情况下,子类的指针和第一个基类的指针应该是一样的,和第二个基类是不一样的。