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

谁能帮忙解释一下下边注释的地方为什么错误?纠结很长时间了,这是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类对象的指针

}


慕神8447489
浏览 744回答 2
2回答

慕的地10843

最好的答案就是再看一遍c++ primer。因为不是在基类的成员函数里面。所谓封装的概念,在类的外面无法访问类的私有和保护的东西。pb->foo_bar这行不是在Base类的成员函数,而是在derved的成员函数里面。

饮歌长啸

foo_bar == pb->foo_bar这个句子中,pb是指传过来的其他base对象指针,不是this指针指代的对象;而派生类对象可以访问对象自己的基类成员变量是可以的,例如下面这个句子是编译正确的foo_bar == foo_bar
打开App,查看更多内容
随时随地看视频慕课网APP