C++中的继承问题

在刷程序员面试宝典时看到这样一题:

#include <iostream>
using namespace std;

class A
    {
     public:
       int _a;
       A()
          {
            _a = 1;
           }
        void print()
           {
            printf("%d", _a);
            }
};

class B : classA
    {
     public:
       int _a;
       B()
          {
            _a = 2;
           }
};
       int main()
           {
            B b;
            b.print();
            printf("%d ",b._a);
}

答案输出为12;

答案解释是B类中的_a把A类中的_a"隐藏"了。在构造B类时,先调用A类的构造函数,所以A类的_a是1,而B类的_a是2;

可能许多人会认为答案是22,那么在这里如何才能让输出变成22呢?

第一个方法是在子类B中将从父类A继承的print()函数显示的写出来;

第二个方法是将父类A中的print()函数声明为虚函数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值