- 论坛徽章:
- 0
|
以前的帖子没搞明白: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成员,
我有点不理解 |
|