Я пытаюсь создать программу, которая может выполнять операции со сложными числами. Однако я застрял с оператора * Я не могу понять, как сделать эти 2 случая работы:Оператор * перегрузка C++
First:
c = 10 * d;
cout << c << endl;
Second:
c = d * 10;
cout << c << endl;
Это мой заголовок:
class Complex
{
private:
double Real, Imag;
public:
Complex() : Real(), Imag()
{
}
//----------------------------------------------------------------------
Complex (double Real) //Initialization with only one variable
{
this->Real = Real;
Imag = 0;
}
//----------------------------------------------------------------------
Complex (double Real, double Imag) //Complete initialization
{
this->Real = Real;
this->Imag = Imag;
}
//----------------------------------------------------------------------
Complex & operator = (const Complex &s)
{
Real = s.Real;
Imag = s.Imag;
return *this;
}
//----------------------------------------------------------------------
Complex operator * (Complex s) // (r + i) * x
{
this->Real *= s.Real;
this->Imag *= s.Real;
return *this;
}
//----------------------------------------------------------------------
Complex & operator *= (Complex s) //Reference
{
Real *= s.Real;
Imag *= s.Imag;
return *this;
}
//----------------------------------------------------------------------
friend Complex operator * (Complex s1, Complex s2);
//----------------------------------------------------------------------
friend ostream &operator << (ostream &s, const Complex &c)
{
s << c.Real << " + " << c.Imag;
return s;
}
};
//Out of class functions
inline Complex operator * (Complex s1, Complex s2) // x * (r + i)
{
s2.Real *= s1.Real;
s2.Imag *= s1.Real;
return s2;
}
//----------------------------------------------------------------------
bool Complex::operator == (const Complex &s) const
{
return (this->Real == s.Real && this->Imag == s.Imag);
}
//----------------------------------------------------------------------
#endif /* __Complex_H__ */
Моя идея состояла в том, чтобы использовать оператор внутри класса для второго случай и снаружи для первого случая. Но у меня была ошибка:
error: ambiguous overload for 'operator*' in 'd * 10
Как прояснить компилятор, какой перегруз использовать?
Мои главным является:
#include <iostream>
#include "complex.h"
using namespace std;
int main()
{
Complex c, d(3, 5);
c = 10 * d;
cout << c << endl;
c = d * 10;
cout << c << endl;
}
Как выглядит ваш фактический код? 'c = 10 * d;' сам по себе не будет компилироваться. – AndyG
Не связано с вашей проблемой, но ваш 'operator *' ведет себя точно как' operator * = ', что неверно. И зачем вам нужны как перегрузки в классе, так и внеклассные перегрузки? кажется, что компилятор не может решить, какой из них вызывать. –
Моя идея сделать перегрузку классов и из них состояла в том, чтобы заставить оба этих случая работать. Я не знаю, как его решить в классе – Aghero