Skip to content

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;
}

Comments