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

为什么这里指向基类的指针不能访问自己的Protected成员?

为什么这里指向基类的指针不能访问自己的Protected成员?

C++
慕神8447489 2018-11-10 11:11:17
谁能帮忙解释一下下边注释的地方为什么错误?纠结很长时间了,这是c++ primer上的一道题。struct Base{    foo(int);protected:    int bar;    double foo_bar;};struct Derived : public Base{    foo(string);    bool bar(Base *pb);    void foobar();protected:    string bar;};bool Derived::bar(Base *pb){    return foo_bar == pb->foo_bar;//这里错误,通过指向Base类对象的指针访问其Protected的成员foo_bar错误,应将pb定义为指向子类Derived类对象的指针}
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

最好的答案就是再看一遍c++ primer。

因为不是在基类的成员函数里面。

所谓封装的概念,在类的外面无法访问类的私有和保护的东西。

pb->foo_bar这行不是在Base类的成员函数,而是在derved的成员函数里面。


查看完整回答
反对 回复 2018-11-15
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

foo_bar == pb->foo_bar

这个句子中,pb是指传过来的其他base对象指针,不是this指针指代的对象;而派生类对象可以访问对象自己的基类成员变量是可以的,例如下面这个句子是编译正确的

foo_bar == foo_bar


查看完整回答
反对 回复 2018-11-15
  • 2 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信