浅谈C++中的友元关系
来源:互联网 发布:win10电脑无法识别网络 编辑:程序博客网 时间:2024/05/21 08:12
http://www.cnblogs.com/accepted/archive/2010/09/04/1818173.html
在封装中C++类数据成员大多情况是private属性;但是如果接口采用多参数实现肯定影响程序效率;然而这时候如果外界需要频繁访问这些私有成员,就不得不需要一个既安全又理想的“后门”——友元关系;
C++中提供三种友元关系的实现方式,友元函数、友元成员函数、友元类。
友元函数:既将一个普通的函数在一个类中说明为一个friend属性;其定义(大多数会访问该类的成员)应在类后;
友元成员函数:既然是成员函数,那么肯定这个函数属于某个类,对了就是因为这个函数是另外一个类的成员函数,有时候因为我们想用一个类通过一个接口去访问另外一个类的信息,然而这个信息只能是被它授权的类才能访问;那么也需要用friend去实现;这个概念只是在声明的时候稍有变化;
友元类:友元类声明会将整个类说明成为另一个类的友元关系;和之前两种的区别是集体和个人的区别;友元类的所有成员函数都可以是另一个类的友元函数;
值得注意的是友元关系是单向的,有点像我们恋爱中出现的单相思 O(∩_∩)O,单向关系就是说如果A被说明成B的友元关系,那么只能说A是B的友元,并不代表B是A的友元;其次在多数情况下友元关系的函数都会访问它被说明中类的成员,这时候应该将函数定义在类的后面;
下面给一个简单的例程代码;
using namespace std; class B; class A{ private: int x; public: A(); void display(B &); }; class C; class B{ private: int y; int z; public: B(); B(int, int); friend void A::display(B &);//友元成员函数 friend void display(B &);//友元函数 friend class C;//友元类 }; class C{ private: int sum; void calc(B &); public: C(); void display(B &); }; //必须在友元关系的类后进行定义 void display(B &v)//友元函数 { cout << v.y << " " << v.z << endl; } A::A() { this->x = 0; } void A::display(B &v)//友元成员函数 { this->x = v.y + v.z; cout << this->x << endl; } B::B() { this->y = 0; this->z = 0; } B::B(int y, int z) { this->y = y; this->z = z; } C::C() { sum = 0; } void C::display(B &v) { this->calc(v); cout << sum << " = " << v.y << " + " << v.z << endl; } void C::calc(B &v) { sum = v.y + v.z; } int main() { A a; B b(2, 3); display(b); a.display(b); C c; c.display(b); return 0; }
- 浅谈C++中的友元关系
- 浅谈C++中的友元关系
- 浅谈C++中的友元关系
- 浅谈C++中的友元关系
- 浅谈C++中的友元关系
- C++学习 浅谈C++中的友元关系
- C++中的友元关系
- C++中的友元关系
- c++中的友元关系
- C++中的友元关系
- C++中的友元关系
- [C++]友元关系的继承性
- 浅谈C++友元
- 友元关系
- 友元关系
- C++ 友元关系
- 友元关系
- 浅谈ACM竞赛中的逆元
- 网络红人潘春春写真曝光 因尺度大胆走红 秒杀宅男女神柳岩林志玲
- C 宏定义
- Effective C++实践
- json & bosn
- Saving and Loading the Checklist Items
- 浅谈C++中的友元关系
- 成功申请到ClickDealer联盟
- 对于学习效率的感想
- 测试你最真实的一面!很准的哦
- SSE 指令 gcc编译
- UNDO管理
- 单链表的基本操作
- Android实现单线程异步多文件下载的代码
- Modernize-your-HTML5-Canvas-game