CPP 学习思考一: friend
分为 friend 函数和 friend 类。一个类的 friend 函数/类可以访问这个类的私有变量。实际上仔细想想,他这个感觉破坏了类之间的严格关系,这篇文章主要记录一下我觉得 friend 比较有用的地方。
1. 用途一: 迭代器
迭代器是一个容器的 friend,迭代器要接触到容器中的私有变量,实现方式使用 friend 比较方便。
2. 用途二: 单元测试
有时写了一个类,需要进行单元测试方法,那难免要去访问私有变量。让单元测试方法作为被测试的类的 friend,这样方便多了。也可以在编译时添加选项 -Dprivate=public
或者 测试时写入 #define private public
。
3. 用途三: 运算符重载
比如一个变量 A a
,现在进行一个运算符重载 A operator+(int n)
,那么我们确实可以 a = a+5
。但是 a = 5+a
却不可以!
所以要重载一个函数,即 A operator+(int n, const A& a)
,这样可以。但是万一这个函数里面要访问 a
的私有变量,所以要把这个重载函数变成 friend A operator+(int n, const A&a)
。
比较常见的就是输出符号重载了,ostream
要访问类的私有变量,使用 friend 比较方便。
friend ostream & operator<<(ostream &os, const Demo& p) {
return os << p.private_value;
}