为什么在派生类定义中可以使用派生类对象的protected成员

zhaoomeng 2014-04-09 02:25:32
class A
{
protected:
int i;

public:
A() :i(6){}
};

class B :public A
{
public:
void test(B & rhs)
{
cout << i << endl;
cout << rhs.i << endl;
}
};


以上的程序中,cout<<i<<endl;我还可以理解,那是使用自己基类的protected成员,但是cout<<rhs.i<<endl;我就无法理解了,对于派生类对象rhs而言,程序员明明就有是用户的角色,为什么也可以使用protected成员?按照这种用法,为什么把B & rhs换成A & rhs就不行了呢?
C++真是奇怪。
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2014-04-09
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 楼主 zhaoomeng 的回复:
class A
{
protected:
	int i;

public:
	A() :i(6){}
};

class B :public A
{
public:
	void test(B & rhs)
	{
		cout << i << endl;
		cout << rhs.i << endl;
	}
};
以上的程序中,cout<<i<<endl;我还可以理解,那是使用自己基类的protected成员,但是cout<<rhs.i<<endl;我就无法理解了,对于派生类对象rhs而言,程序员明明就有是用户的角色,为什么也可以使用protected成员?按照这种用法,为什么把B & rhs换成A & rhs就不行了呢? C++真是奇怪。
访问权限是基于类的,只要是这个类就可以,不管是不是一个对象
lee_鹿游原 2014-04-09
  • 打赏
  • 举报
回复

class B :public A
{
public:
	void test(B & rhs)
	{
		cout << i << endl;
		cout << rhs.i << endl;
		cout << this->i << endl;
	}
};

int main()
{
	A a;
	a.i; //
}

zcdabing 2014-04-09
  • 打赏
  • 举报
回复
你是程序员,人家test又不是,人家是法定的int i使用者

65,208

社区成员

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

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