运算符重载的俩边为不同类的对象
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <string>
#if 0
运算符重载实践
结论:
1,一个操作符的左右操作数不一定是相同类型的对象,
这就涉及到将该操作符函数定义为谁的友元,谁的成员问题。
2,一个操作符函数,被声明为哪个类的成员,取决于
该函数的调用对象(通常是左操作数)。
3,一个操作符函数,被声明为哪个类的友员,取决于
该函数的参数对象(通常是右操作数)
#endif
class Mail; //向前声明
class Sender
{
public:
Sender(string addr)
:_addr(addr){}
Sender & operator<<(Mail &mail);
private:
string _addr;
};
class Mail
{
public:
Mail(string title, string contents, string t)
:_title(title), _contents(contents), _time(t)
{
}
friend Sender & Sender::operator<<(Mail &mail);
private:
string _title;
string _contents;
string _time;
};
Sender & Sender::operator<<(Mail &mail)
{
cout << _addr << endl;
cout << mail._title << endl;
cout << mail._contents << endl;
cout << mail._time << endl;
return *this;
}
int _tmain(int argc, _TCHAR* argv[])
{
Sender sender(".com");
Mail mail1("开会", "关于升职", "2015.1.1"),
mail2("取消开会", "升职纯属虚构", "2015.1.1");
sender << mail1 << mail2;
return 0;
}