您的位置:首页 > 编程语言 > C语言/C++

C++复习要点总结之——友元

2016-07-09 19:01 435 查看
在C++中,类的成员访问权限有三种,private,protected,public。

private:类中的private成员只能够在本类中或者友元访问,子类或外界无法访问私有成员。

protected:类中的protected成员只允许本类或者子类中访问,外界无法访问,(定义类时如果希望成员被子类继承而外界不能访问就可以定义为 protected成员)

public:类中public成员在本类、子类和外界中都能够进行访问。

请思考:为什么private中的成员可以被友元访问,什么是友元?友元是如何实现的?

在某些情况下,我们需要允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问。这就是友元存在的使命。例如,被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。这些操作符不可能为类的成员。然而,尽管不是类的成员,它们仍是类的“接口的组成部分”。

而友元机制,允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字 friend 开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受声明出现部分的访问控制影响。

下面给出C++中所有有关友元的结论和限制,然后后面针对每个细节给出示例:

1. 友元函数



2友元类

Ø 若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数

Ø 友员类通常设计为一种对数据操作或类之间传递消息的辅助类



将类man声明为类woman的友元类,使得可以通过类man对象访问类woman的私有成员。

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: