复杂的运算符重载

时间:2011-02-10 15:50:01

标签: c++ operator-overloading complex-numbers

这个复杂的重载函数有什么问题?

#include<iostream.h>
#include<conio.h>
class complex
{
private:
    float real,imag;
public:
    complex()
    {}
    complex(float r,float i)
    {
        real=r;
        imag=i;
    }
    void display()
    {
        cout<<"the complex is \t"<<real<<"+i."<<imag;
    }
    complex operator * (complex c1,complex c2)
    {
        complex t;
        t.real=c1.real*real-imag*c1.imag;
        t.imag=real*c1.imag+c1.real*imag;
        return(t);
    }
};
void main()
{
    clrscr();
    complex c1(4,-5);
    complex c2(9,-2);
    complex c3;
    c3=c1*c2;
    c3.display();
    getch();
}

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  1. 你的operator*应该在课外定义(这是一个很好的做法,支持正确投射之类的东西)。而不是使用realimag,请使用c2.realc2.imag

  2. 要么让这个函数按引用返回,要么实现operator=(这个可以在类中,并且应该只接收1个参数 - rhs)。