c++在子类中用父类对象访问父类protected成员

子类中通过父类的类名作用域调用父类的protected成员变量是不可以的子类中通过父类的对象调用父类的protected成员变量是不可以的子类中直接用父类的protect... 子类中通过父类的类名作用域调用父类的protected成员变量 是不可以的

子类中通过父类的对象调用父类的protected成员变量 是不可以的

子类中直接用父类的protected成员变量是可以的
如:
class Base//基类
{
public:
Base(int b):b_(b){}
protected:
int b_;
}

class Derived : public Base//子类
{
public:
void Test()
{
A a(1);
a.b_ = 100; //error C2248: “A::b_”: 无法访问 protected 成员(在“A”类中声明)
A::b_ = 100; //error C2597: 对非静态成员“A::b_”的非法引用
b_ = 100; //正确通过
}
}

那么谁能帮我解释以下 这两个报错的详细原因是什么
protected的成员变量在本类和其子类可以直接用,当用父类对象,在父类外以及其子类外调用其protected成员时报错我理解,但是父类对象在其子类中调用父类中的protected成员变量也不行是为什么呢。
上面代码有误。。 A就是Base B就是Derived
展开
 我来答
仙戈雅3n
2015-03-14 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:898万
展开全部
基类名用错了,从你的给出的代码上下文来看,没有类A,只有Base。楼主是否搞错了?
更多追问追答
追问
啊对写错。。A就是Base B就是Derived
追答
你这种写法是相互矛盾的,本来基类的受保护成员只能被其派生类访问,而你现在又再次在派生类里定义一个基类,然后调用受保护的成员数据。那样编译器肯定是会报错的,因为你这样做相当于在非派生类里调用受保护的成员数据。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式