关于protected标号的访问权限~~求解

grimmchen 2010-06-09 12:20:45
C++PRIMER里说:protected成员可以被派生类对象访问但不能被该类型的普通用户访问----该类型的普通用户,是不是指的基类的对象?

还有:派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限----跟上面的好像有点矛盾,求解
...全文
84 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longerandlonger 2010-06-09
  • 打赏
  • 举报
回复
我是这么理解protected的,你别当真:

基类定义了protected的成员 m ,【基类的成员】可以访问 m ,但【基类的对象】不能访问 m

派生类public继承基类,则 m 成为派生类的protected成员,访问权限与基类中相同。

pengzhixi 2010-06-09
  • 打赏
  • 举报
回复
Drived构造函数前加public:
pengzhixi 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 grimmchen 的回复:]
C++PRIMER里说:protected成员可以被派生类对象访问但不能被该类型的普通用户访问----该类型的普通用户,是不是指的基类的对象?
就是说除了能被派生类成员访问外,其余的访问权限和private一样,不能被外界直接访问。

还有:派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限----跟上面的好像有点矛盾,求解

不矛盾看例子。
[/Quote]

class Base{
protected:
int i;
public:
Base (int k=10):i(k){}
};
class Drived:public Base{
Drived(){}
void getvalue( Base&rhs)
{
cout<<i<<endl;//OK
cout<<rhs.i<<endl;//can't compile
}
};
int main()
{
Base obj(5);
Drived d;
d.getvalue(obj);
system("pause");
return 0;
}
grimmchen 2010-06-09
  • 打赏
  • 举报
回复
哦,那基类的protected成员能被基类自己的对象访问不,越看越糊涂了
z569362161 2010-06-09
  • 打赏
  • 举报
回复
一个类只可以对自身类或同类类型对象protected访问,也可以访问其派生类从基类继承的protected成员,但是不可以访问派生类自身定义的protected成员。
z569362161 2010-06-09
  • 打赏
  • 举报
回复
派生类不能访问另一个独立的基类对象的protected成员是有必要的,如果不是这样,就破坏了对象的封装性:一个对象的成员被另一个对象改变了,虽然是在派生类对象中修改的,而且修改的是保护成员,但仍然是另一个对象改变了它,破坏了对象数据封装。
liutengfeigo 2010-06-09
  • 打赏
  • 举报
回复
protected 对外表现得像pritive
对派生类表现得像public.
这么理解可以不?
liutengfeigo 2010-06-09
  • 打赏
  • 举报
回复
protected 专门为派生类设计的~?
liutengfeigo 2010-06-09
  • 打赏
  • 举报
回复
void getvalue( Base&rhs)
{
cout<<i<<endl;//OK
cout<<rhs.i<<endl;//can't compile
}
UP~!学习了

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧