注册 登录
编程论坛 C++教室

关于C++转换构造函数的问题求教!

S140131022 发布于 2015-09-22 15:28, 588 次点击
//本人用的是VS2010,编写了这个程序实现运算符的重载,中间用到了转换构造函数,但是程序一直编译不通过,请问是我的代码问题还是VS2010的问题吗?
#include<iostream>
using namespace std;
class Complex
{
public:
    Complex();
    Complex(int,int);
    ~Complex();
    Complex(double r){real=r;imag=0;}                   //此处定义转换构造函数
    friend Complex operator+(Complex &a,Complex &b);
    friend Complex operator-(Complex &a,Complex &b);
    friend Complex operator*(Complex &a,Complex &b);
    friend Complex operator/(Complex &a,Complex &b);
    friend ostream&operator<<(ostream&output,Complex&exp);
    friend istream&operator>>(istream&input,Complex&exp);
private:
    double real;
    double imag;
};

Complex::Complex(){}
Complex::Complex(int a,int b):real(a),imag(b){}
Complex::~Complex(){}

Complex operator+(Complex &a,Complex &b)
{
    return Complex(a.real+b.real,a.imag+b.imag);
}

Complex operator-(Complex &a,Complex &b)
{
    return Complex(a.real-b.real,a.imag-b.imag);
}

Complex operator*(Complex &a,Complex &b)
{
    return Complex((a.real*b.real-a.imag*b.imag),(a.real*b.imag+a.imag*b.real));
}

Complex operator/(Complex &a,Complex &b)
{
    return Complex((a.real*b.real+a.imag*b.imag)/(b.real*b.real+b.imag*b.imag),(a.imag*b.real-a.real*b.imag)/(b.real*b.real+b.imag*b.imag));
}

ostream&operator<<(ostream&output,Complex&exp)
{
    if(exp.imag<0)
        output<<exp.real<<"+"<<-exp.imag<<"i";
    else
        output<<exp.real<<"+"<<exp.imag<<"i";
    return output;
}

istream&operator>>(istream&input,Complex&exp)
{
    input>>exp.real>>exp.imag;
    return input;
}

int main()
{
    Complex a,b,c;
    double d=9;
    cin>>a;
    c=a+d;      //此处想利用转换构造函数将d转换为Complex类型(9+0i)然后利用运算符重载进行计算,但一直出错!
    cout<<c<<endl;
    system("pause");

}
6 回复
#2
林月儿2015-09-22 20:24
程序代码:
int main()
{
    Complex a,b,c;
    double d=9;
    Complex e=Complex(d);
    cin>>a;
    c=a+e;      //此处想利用转换构造函数将d转换为Complex类型(9+0i)然后利用运算符重载进行计算,但一直出错!
    cout<<c<<endl;
    system("pause");

}
#3
S1401310222015-09-22 20:49
回复 2楼 林月儿
请问系统不能自己默认转嘛?为神马谭浩强书上说可以默认转,而我的VS2010不行!
#4
林月儿2015-09-22 21:39
以下是引用S140131022在2015-9-22 20:49:37的发言:

请问系统不能自己默认转嘛?为神马谭浩强书上说可以默认转,而我的VS2010不行!


我的和你一样也不行
#5
诸葛欧阳2015-09-22 23:42
拷贝构造函数的参数必须是本类的引用
#6
诸葛欧阳2015-09-22 23:43
搞错了,答非所问
#7
rjsp2015-09-23 08:25
因为从 double 隐式构造出来的是 临时Complex对象(右值),没法进行 non-const reference

friend Complex operator+(Complex &a,Complex &b);
应该是
friend Complex operator+( const Complex& a, const Complex& b );
下同
1