指向派生类对象的指针会访问基类的protected成员?
指向派生类对象的指针能访问基类的protected成员????
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属性不发生改变;
- 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属性不发生改变;