下面是c++运算符重载的两种形式:
形式1:
Point operator + (const Point& A,const Point& B)
{
return Point(A.x+B.x,A.y+B.y);
}
形式2:
ostream& operator << (ostream& out,const Point& p)
{
out<<'('<<p.x<<','<<p.y<<')';
return out;
}
1.形式1返回的是一个变量,常用的场合是两个数据运算后得到第三个数据,不改变原来两个数据。以加法为例:A+B->C
形式2返回的是一个引用,常用的场合是两个数据运算后把结果存入到其中一个数据中,需要改变原来某一个的值。以输出流运算为例:cout<<p->cout(新的)
2.由上面可知,形式2中我们希望改变cout的值,因此把形参声明为ostream型的引用。但是,为什么另外一个形参(包括形式1中的形参)为什么要申明为引用呢?
原来,通常形参采用引用传递,是由于类对象占用内存较大,引用传递时,无需在栈内存中开辟空间以装载临时对象,也省去了复制的耗时过程,为了避免改变形参的内容,还需配以const加以修饰。由于是引用,如果改变了形参,那个实参也会跟着改变。