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

关于基类的友元对派生类成员的访问权限,该怎么解决

2012-04-20 
关于基类的友元对派生类成员的访问权限我看了下面的贴子后发现问题http://topic.csdn.net/u/20091204/16/4

关于基类的友元对派生类成员的访问权限
我看了下面的贴子后发现问题
http://topic.csdn.net/u/20091204/16/440ccc4a-9a49-401a-984f-06f787a8aa3b.html?seed=1715884718&r=65150379

原帖里LZ的代码,除了最后两行,也就是
// int mem5(protected_derived d) {return d.j2;}
// int mem6(protected_derived d) {return d.j3;}
不能成功编译外,其他全部能编译成功,我用的是 VC++6.0,究竟是怎么回事?


我自己测试的结论是:基类的友元能访问派生类的所有从基类继承的成员,无论是哪种继承关系。这个结论对吗?

[解决办法]
错。基类的友元不能访问派生类的成员的。举个例子:你的朋友也是你父亲的朋友?你父亲的朋友也是你的朋友??显然是错的。友元关系不能继承的
[解决办法]
不过,int mem1(protected_derived d) {return d.pub_val;}

这种调用应该失败,因为在protected_derived类及其友元之外,是不应该知道protected_derived是派生自Base的,如果你编译器让它通过,说明这是编译器bug

热点排行
Bad Request.