#include<iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0,imag=0;}
Complex(int r){real=r;imag=0;}
Complex(double r ,double i):real(r),imag(i){}
friend Complex operator + (Complex c1,Complex c2);
void display();
private:
double real;
double imag;
};void Complex::display()
{
cout<<real<<"+"<<imag<<"i"<<endl;
}Complex operator+(Complex c1,Complex c2)
{
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
return Complex(c1.real+c2.real,c2.imag +c1.imag);
}int main()
{
Complex c1(3,6),c2,c3;
// c3=c1+c2;
c3=c1+4;
cout<<"c3=c1+4=";
c3.display();
c2=4+c1;
cout<<"c2=4+c1=";
c2.display();
}
文中两处加粗的地方我开始分别写的是:friend Complex operator + (Complex&,Complex&);
Complex operator+(Complex &c1,Complex &c2)
之后一直报错 error: no match for 'operator+' (operand types are 'Complex' and 'int')|
之后查找得知: 传参中含有&,则传入参数是一个引用,参数传递的过程中就复制该引用-----(复制:指向同一个变量)
在传递过程中就没有产生新的变量,不会调用构造函数。
传参中不使用&(值传递):在函数调用过程中,传递参数是复制传入的参数生成另外一个变量(要构造一个新的变量----调用构造函数)传入友元函数。