简单描述,当重载 + 号参数为非引用时可以实现隐式转换
但若加上引用符号则不行,求解?
错误提示:
error: no match for 'operator+' (operand types are 'Complex' and 'double')|
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0,imag=0;}
Complex(double r, double i){real=r, imag=i;}
Complex operator - (Complex &c);
Complex operator * (Complex &c);
Complex operator / (Complex &c);
Complex(double r){real=r,imag=0;}
friend Complex operator+(Complex &c1, Complex &c2);
//operator double(){return real;}
void display();
private:
double real;
double imag;
};
Complex Complex::operator*(Complex &c)
{
return (Complex(real*c.real, imag*c.imag));
}
Complex Complex::operator/(Complex &c)
{
return (Complex(real/c.real, imag/c.imag));
}
Complex Complex::operator-(Complex &c)
{
return (Complex(real-c.real, imag-c.imag));
}
void Complex::display()
{
cout <<"(" <<real <<"," <<imag <<"i)" <<endl;
}
Complex operator + (Complex &c1,Complex &c2)
{
return (Complex(c1.real+c2.real, c1.imag+c2.imag));
}
int main(void)
{
Complex c1(2,4), c2(3,6), c3;
double i = 7.0;
c1.display(), c2.display();
c3 = c2 + i;
c3.display();
c3 = c2 - c1;
c3.display();
c3 = c2 * c1;
c3.display();
c3 = c2 / c1;
c3.display();
return 0;
}