首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-09-07 
指向派生类对象的指针能访问基类的protected成员????C/C++ codestruct Base{foo(int)protected:int bard

指向派生类对象的指针能访问基类的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 继承应该不会改变成员的访问级别吧

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

热点排行