为了账号安全,请及时绑定邮箱和手机立即绑定

关于继承的一点问题

在代码Soldier类中如果继承Person类的方式由Public改成protected就会报错.

error: 'std::string Person::m_strName' is inaccessible

求教这是为什么?

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

/**
 * 定义人的类: Person
 * 数据成员姓名: m_strName
 * 成员函数: eat()
 */
class Person
{
public:
    string m_strName;
    void eat()
    {
        cout << "eat" << endl;
    }
};

/**
 * 定义士兵类: Soldier
 * 士兵类公有继承人类: public
 * 数据成员编号: m_strCode
 * 成员函数: attack()
 */
class Soldier:protected Person
{
public:
    string m_strCode;
    void attack()
    {
        cout << "fire!!!" << endl;
    }
};

int main(void)
{
    // 创建Soldier对象
    Soldier S;
    // 给对象属性赋值
    S.m_strName = "Jim";
    S.m_strCode = "592";
    // 打印对象属性值
    cout << soldier.m_strName << endl;
    cout << soldier.m_strCode << endl;
    // 调用对象方法
    S.eat();
    S.attack();

    return 0;
}


正在回答

1 回答

S.m_strName = "Jim"; 这句话有问题,protected继承后,string m_strName就由public变为protected,所以直接访问就会出错

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75188    人
  • 解答问题       251    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

关于继承的一点问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号