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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值