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在后,所以
20180315 代码错题(12)_第1张图片 
 
    
如果我们输出三个指针的值。
上面的代码在我的电脑上输出
0x7fff502f5aa8

0x7fff502f5ab0

0x7fff502f5aa8

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


转载于:https://www.cnblogs.com/kxzh/p/8577078.html

你可能感兴趣的:(20180315 代码错题(12))