#include<iostream>
using namespace std;
class A
{
public:
A(int x,int y)
{
a=x;
b=y;
}
friend ostream &operator <<(ostream& S,A &c)
{
S<<c.a<<" "<<c.b<<endl;
return S;
}
private:
int a;
int b;
};
int main()
{
A e(3,4);
cout<<e<<endl;
return 0;
}
操作符<<的重载必须声明为友元函数,因为cout是ostream类的对象,ostream没有公有的复制构造函数,因此无法调用该类的复制构造函数复制对象,所以无法按值返回,必须按引用的方式接受ostream对象,并且按引用的方式返回ostream对象。由于cout是另一个类的对象,所以必须在类体中把重载操作符函数声明为友元,或者用如下方式定义操作符的重载。
#include<iostream>
using namespace std;
class A
{
public:
A(int x,int y)
{
a=x;
b=y;
}
public:
int a;
int b;
};
ostream &operator <<(ostream& S,A &c)
{
S<<c.a<<" "<<c.b<<endl;
return S;
}
int main()
{
A e(3,4);
cout<<e<<endl;
return 0;
}