友元函数<一>(继承产生的访问权限问题)
2009-12-20 11:53
友元关系不能继承。
1. 基类的友元对派生类的成员没有特殊访问权限。
2. 如果基类被授予友元,则只有基类具有特殊访问权限,该基类的派生类无特殊访问权限;
3. 但该基类没有被派生类重写且有特殊访问的成员函数仍能被派生类对象直接调用。
class Base{
private:
int nData_base;
friend class Friend_base;
public:
Base(): nData_base(0){}
};
class Derived:public Base{
private:
int nData_derive;
};
class Friend_base{
public:
void try1(Base &b){
cout<<”b.nData_base”<<endl; // OK
}
void tyr2(Base &b){
cout<<”b.nData_bae”<<endl;// OK
}
void try3(Derived &d){
cout<<”d.nData_derived”<<end; // ERROR 原因:1
}
};
classs Friend_derived:public Friend_base{
public:
void try1(Base &b){
cout<<”b.nData_base”<<endl; // ERROR 原因:2
}
void fun(Base &b){
cout<<"b.nData_base"<<endl; //ERROR 原因:2
}
};
int main(){
Base b;
Friend_derived f;
f.try2(b); // OK 原因:3
return 0;
}