C++——友元friend,实践
2020-11-29 本文已影响0人
StevenHD
一、友元的概念
- 同类之间是不需要友元的
- 只有
不同类
之间需要友元
友元friend可以让类B的对象
高效地
访问类A的私有成员,如果不用友元friend
,那么就需要通过类A的公有成员函数
来访问类A的私有数据成员
(这种做法太麻烦了)。
二、前向性声明
- 前向性声明具有局限性——解决这种
A& t
问题。
三、不同类之间的声明
全局函数和类B的成员函数——
全局函数可以不加::,但是另一个类要加上B::
四、实践友元
- 友元函数的
实现
需要放在类外
。 - 如果一个类中的多个成员函数都需要被声明成友元,那么我们直接将这个类声明为
友元类
。
声明为类A(比如Point)的友元,就可以通过A(比如Point)的对象,访问A(比如Point)的private数据成员
五、友元的利弊
友元的好处在于——可以不用通过函数接口
来使用private成员,而是可以直接通过对象
来访问。(当然就算是自己类的对象也不能直接访问自己类的private数据成员
)
友元一般都是函数,
友元类
也是对函数有便利,让友元函数直接使用private数据成员,因为本类自己的公有函数是可以随便用Private数据成员的。
友元的坏处在于——破坏了封装性
六、运算符重载与友元
将一个全局函数变为友元函数
#include <iostream>
using namespace std;
class Complex
{
public:
Complex (int r = 0, int i = 0) : real(r), image(i) {}
friend Complex operator+(Complex& a, Complex& b);
void dis()
{
cout << "(" << real << "," << image << ")" << endl;
}
private:
int real;
int image;
};
Complex operator+ (Complex& a, Complex& b)
{
Complex t;
t.real = a.real + b.real;
t.image = a.image + b.image;
return t;
}
int main()
{
Complex c1(1, 2), c2(3, 4);
Complex c3 = c1 + c2;
c3.dis();
return 0;
}