#include <iostream>
using namespace std;
class complex
{
private:
int re;
int im;
public:
complex(int r ,int i ); //错误写法, complex(int r = 0,int i = 0 );
~complex();
inline int real() const { return re;} //内联函数
inline int imag() const { return im;}
complex operator+ (complex &n);
};
complex::complex(int r = 0 ,int i = 0 )
: re (r),im (i) //构造函数的初始化列表
{
//re = r;
//im = i;
}
complex::~complex()
{
}
complex complex::operator+ (complex &n)
{
return complex (this->real() + n.real(),this->imag() + n.imag());
}
ostream & operator<<(ostream &os,complex &n)//操作符重载
{
os << n.real() << "+" << n.imag() << "i";
return os;
}
main()
{
complex a(4,5);
complex b(1,1);
complex c = a+b;
cout << c << endl;
return 0;
}
输出结果:
5+6i
再看下面的代码,这是一段错误的代码:
#include <iostream>
using namespace std;
class complex
{
private:
int re;
int im;
public:
complex(int r ,int i ); //错误写法, complex(int r = 0,int i = 0 );
~complex();
inline int real() const { return re;} //内联函数
inline int imag() const { return im;}
complex operator+ (complex &n);
};
complex::complex(int r = 0 ,int i = 0 )
: re (r),im (i) //构造函数的初始化列表
{
//re = r;
//im = i;
}
complex::~complex()
{
}
complex complex::operator+ (complex &n)
{
return complex (this->real() + n.real(),this->imag() + n.imag());
}
ostream & operator<<(ostream &os,complex &n)//操作符重载
{
os << n.real() << "+" << n.imag() << "i";
return os;
}
main()
{
complex a(4,5);
complex b(1,1);
//complex c = a+b;
cout << a+b << endl; //报错
return 0;
}
第46行报错。
对于这个错误看了很长时间,终于找到了错误。:
#include <iostream>
using namespace std;
class complex
{
private:
int re;
int im;
public:
complex(int r ,int i ); //错误写法, complex(int r = 0,int i = 0 );
~complex();
inline int real() const { return re;} //内联函数
inline int imag() const { return im;}
complex operator+ (complex &n);
};
complex::complex(int r = 0 ,int i = 0 )
: re (r),im (i) //构造函数的初始化列表
{
//re = r;
//im = i;
}
complex::~complex()
{
}
complex complex::operator+ (complex &n)
{
return complex (this->real() + n.real(),this->imag() + n.imag());
}
ostream & operator<<(ostream &os,complex n)//修改的地方
{
os << n.real() << "+" << n.imag() << "i";
return os;
}
main()
{
complex a(4,5);
complex b(1,1);
//complex c = a+b;
cout << a+b << endl;
return 0;
}
将这行代码:
ostream & operator<<(ostream &os,complex &n)
修改为:
ostream & operator<<(ostream &os,complex n)
结论:
a+b,这样的语句创建的是一个临时对象,我们可以进行传值、赋值的操作,但是不能传引用。