指向派生类对象的指针会访问基类的protected成员?

指向派生类对象的指针能访问基类的protected成员????
C/C++ code

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;
};


c++primer上的一个题
找出错误.
bool Derived::bar(Base *pb)
{return foo_bar==pb->foo_bar;}
在派生类Derived里找不到foo_bar,所以使用基类的foo_bar,pb是指向基类的对象的指针,标准答案说"通过指向Base类对象的指针访问其受保护的成员foo_bar错误,可改正为将pb定义为指向Derived类对象的指针"
我是这么想的,因为Derived是public继承的Base,所以原来在Base是protected的foo_bar被继承下来在Derived也应该是protected吧!那么把pb改成指向Derived类对象的指针就能访问protected成员吗??????


------解决方案--------------------
一般说法是:
类的继承后方法属性变化。
private 属性不能够被继承。
使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变; 


探讨
引用:
public 继承应该不会改变成员的访问级别吧

当然会改变保护的成员的访问权限了/。