免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1256 | 回复: 0
打印 上一主题 下一主题

[C++] 再问有关友元和继承的一些问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-07 21:52 |只看该作者 |倒序浏览
以前的帖子没搞明白:http://topic.csdn.net/u/20091204/16/440ccc4a-9a49-401a-984f-06f787a8aa3b.html?seed=1506412902&r=61706661#r_61706661

//--问题如下----------------------------------

class Base{
        friend class Frnd;
public:
        int pub_val;
protected:
        int pro_val;
private:
        int pri_val;
};

class public_derived : public Base {
};

class protected_derived : protected Base {
};

class private_derived : private Base {
};

class Frnd{
public:
        int i;
        int mem1(protected_derived d) {return d.pub_val;}  //-1
        int mem2(protected_derived d) {return d.pro_val;}  //-2
//      int mem3(protected_derived d) {return d.pri_val;}
//      int mem1(private_derived d) {return d.pub_val;}
//      int mem2(private_derived d) {return d.pro_val;}
//      int mem3(private_derived d) {return d.pri_val;}

};
被注释掉的是错误的地方, 但是标注1和2可以编译过,
Frnd是Base的友元,友元关系不得继承;
所以Frnd不是public_derived类的友元,但是Frnd却访问了public_derived类的protected和private成员,
我有点不理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP