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

关于运算符重载的问题求助

nuclear_1 发布于 2013-04-09 16:16, 573 次点击
自己敲代码,是关于运算符重载的,但运行不通过,自己也看不出来问题到底在哪里了,求高手解疑
#include<iostream.h>
class Complex
{
public:
    float r;
    float i;
    Complex(float x=0,float y=0)
    {
    r=x;
    i=y;
    }
};
Complex operator+ (Complex c1,Complex c2)
{
    Complex temp;
    temp.r= c1.r + c2.r;
    temp.i= c1.i + c2,i;
    return temp;
}
void main()
{
Complex complex1(3.34f,4.8f),complex2(12.8f,5.2f);
Complex complex;
complex=operator+ (complex1,complex2);
cout<<complex.r<<'+'<<complex.i<<'i'<<endl;
}
8 回复
#2
fanpengpeng2013-04-09 16:22
[quote]
#3
fanpengpeng2013-04-09 16:22
[quote]
#4
fanpengpeng2013-04-09 16:24
没有默认构造函数 被你定义的构造函数覆盖掉了
只要自己定义了构造函数 一般就需要重载默认构造函数 除非你很有把握准确控制所有使用到他的代码
运算符函数要么声明为友元 要么就声明为成员 虚然你的成员全是公有的 这里不会出问题 但这是一个习惯问题啊
#5
子楠2013-04-09 22:00
Complex operator+ (Complex c1)
{
    Complex temp;
    temp.r= r + c1.r;
    temp.i= i + c1.i;
    return temp;
}
定义成员函数只需一个参数
#6
rjsp2013-04-10 08:59
程序代码:
#include <iostream>
class Complex
{
public:
    double real;
    double image;

    Complex( double r=0, double i=0 ) : real(r), image(i)
    {
    }
};

inline Complex operator+( const Complex& c1, const Complex& c2 )
{
    return Complex( c1.real+c2.real, c1.image+c2.image );
}

std::ostream& operator<<( std::ostream& os, const Complex& c )
{
    return os << c.real << '+' << c.image << 'i';
}

using namespace std;

int main()
{
    Complex complex1(3.34f,4.8f), complex2(12.8f,5.2f);

    Complex complex = complex1 + complex2;
    cout << complex << endl;
   

    return 0;
}
#7
锋了2013-04-10 12:30
回复 6楼 rjsp
你看版主写的多严谨多标准
#8
zhuxiaoneng2013-04-10 12:30
回复 楼主 nuclear_1
楼主的写法基本没有什么问题
Complex operator+ (Complex c1,Complex c2)
{
    Complex temp;
    temp.r= c1.r + c2.r;
    temp.i= c1.i + c2,i;
    return temp;
}

temp.i= c1.i + c2,i;
应该改为
temp.i= c1.i + c2.i;
#9
nuclear_12013-04-10 13:21
回复 8楼 zhuxiaoneng
找出问题了,原来是把小数点打成逗号了,粗心了!
1