在C++中,类的成员访问权限有三种,private,protected,public。
private:类中的private成员只能够在本类中或者友元访问,子类或外界无法访问私有成员。
protected:类中的protected成员只允许本类或者子类中访问,外界无法访问,(定义类时如果希望成员被子类继承而外界不能访问就可以定义为 protected成员)
public:类中public成员在本类、子类和外界中都能够进行访问。
请思考:为什么private中的成员可以被友元访问,什么是友元?友元是如何实现的?
在某些情况下,我们需要允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问。这就是友元存在的使命。例如,被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。这些操作符不可能为类的成员。然而,尽管不是类的成员,它们仍是类的“接口的组成部分”。
而友元机制,允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字 friend 开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响。
下面给出C++中所有有关友元的结论和限制,然后后面针对每个细节给出示例:
1. 友元函数
2友元类
Ø 若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数
Ø 友员类通常设计为一种对数据操作或类之间传递消息的辅助类
- class woman; // 前向声明
- class man
- {
- public:
- void disp(woman &w);
- void reset(woman &w);
- };
- class woman
- {
- public:
- friend class man; // 将man设为woman的友元类,这样man对象的任何成员函数都可以访问woman的私有成员
- private:
- string name;
- };
- void man::disp(woman &w)
- {
- cout << w.name << endl;
- }
- void man::reset(woman &w)
- {
- w.name.clear();
- }