#include <iostream>
using namespace std;
class Test
{
public:
Test(int _a, int _b)
{
a = _a;
b = _b;
}
// 1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意外)访问的窗口;
// 2)这个友元函数他不属于该类的成员函数,他是定义在类外的普通函数,只是在类中声明该函数
// 可以直接访问类中的private或者protected成员。
// 3)类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在
// 类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定
// 这里之所以声明为友元函数,原因为:
// 首先<<操作符应定义为非成员函数,因为如果是成员函数,则左操作数必须为类对象,
// 但实际使用时类似这样:cout << test,因此第一个参数必然不是类对象,与此相违背。
// 而一般这种运算符都会访问类的私有成员变量,因此将该函数声明为友元函数
friend ostream& operator<<(ostream& out, const Test& test)
{
out << test.a << "\t" << test.b;
return out;
}
int a;
int b;
};
int main()
{
Test test(100, 200);
cout << test; // 输出 100 200
return 0;
}
ostream 表示输出流,out 是 ostream 类的对象。由于采用了引用的方式进行参数传递,并且也返回了对象的引用,所以重载后的运算符可以实现连续输出: 如:cout << testa << testb;