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在后,所以
 

如果我们输出三个指针的值。
上面的代码在我的电脑上输出
0x7fff502f5aa8

0x7fff502f5ab0

0x7fff502f5aa8

 
可以看到pA和pC是相同的。
所以选择C。
 
实际上,在这个情况下,子类的指针和第一个基类的指针应该是一样的,和第二个基类是不一样的。


posted @ 2018-03-15 23:09  Kxzh  阅读(258)  评论(0编辑  收藏  举报