观察下面一段代码:
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。
实际上,在这个情况下,子类的指针和第一个基类的指针应该是一样的,和第二个基类是不一样的。