сложная перегрузка оператора - PullRequest
0 голосов
/ 10 февраля 2011

Что не так с этой сложной функцией перегрузки?

#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 голосов
/ 21 августа 2011

Здесь есть несколько проблем:

  1. ваш operator* должен быть определен вне класса (это хорошая практика для правильной поддержки таких вещей, как приведение типов).вместо использования real и imag используйте c2.real и c2.imag.

  2. , либо сделайте эту функцию возвращаемой по ссылке, либо реализуйте operator= (этонаходиться внутри класса и должен получать только 1 аргумент - rhs).

...