Chinaunix

标题: 再问有关友元和继承的一些问题 [打印本页]

作者: cir2633    时间: 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成员,
我有点不理解




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2