有关c++重载运算符的问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 13:40:27
friend Complex operator + (Complex &c1,Complex &c2);
这里的形参是Complex类型的引用;
friend Complex operator + (Complex c1,Complex c2);
那这里的形参就代表的是什么呢?
那两者有什么区别呢??

第一行是引用,是传地址调用函数,在调用函数时会减少复制对象的开销。这时,形参就是实参的一个引用,对形参的修改会影响到实参。第二行的传值调用,所谓的传值调用是指把实参复制给形参,形参和实参是两个独立的个体,形参是实参在内存上的另一个拷贝,对形参的一切修改一般不会影响到实参。
如,对于第二个声明有以下函数调用:
operator +( arg1,arg2);////arg1,arg2皆为Complex类型的对象
那么主调函数首先在自己的栈帧中新建两个Complex类型的对象,作为被调函数,即Complex operator +( arg1,arg2); 的形参,即c1,c2(这里进行的操作等同于语句Complex c1=arg1;Complex c2=arg2;的语义)。
对于第一个声明,有以下调用:
operator +( arg1,arg2);//同上
在调用该函数前,主调函数将把形参压入自己的栈帧中,这里进行的操作等同于语句:Complex &c1=arg1;Complex &c2=arg2;进行的操作。

在 C++程序设计语言 这本书中,作者,斯特朗斯特鲁普说,函数形参的初始化语义,跟普通对象的初始化语义是一致的。

上面的引用表示是内存的地址,下面的是表示传入一个对像.