所以我被要求重載運算符來實現複數的基本算術運算。我已經得到了+, - 和=的工作,但即使我認爲我有正確的邏輯,但我似乎無法得到*工作。複數重載*運算符(C++)
我的代碼有什麼問題?
#ifndef COMPLEX_HPP
#define COMPLEX_HPP
#include <string>
class Complex
{
public:
Complex(double = 0.0, double = 0.0); // default constructor
Complex add(const Complex&) const; // function add
Complex subtract(const Complex&) const; // function subtract
Complex multiply(const Complex&) const; // function multiply
std::string toString() const; // return string representation
void setComplexNumber(double, double); // set complex number
void operator=(const Complex& obj)
{
(*this).realPart = obj.realPart;
(*this).imaginaryPart = obj.imaginaryPart;
}
Complex operator+(const Complex& obj)
{
Complex tmp_obj = *this;
tmp_obj.realPart = tmp_obj.realPart + obj.realPart;
tmp_obj.imaginaryPart = tmp_obj.imaginaryPart + obj.imaginaryPart;
return tmp_obj;
}
Complex operator-(const Complex& obj)
{
Complex tmp_obj = *this;
tmp_obj.realPart = tmp_obj.realPart - obj.realPart;
tmp_obj.imaginaryPart = tmp_obj.imaginaryPart - obj.imaginaryPart;
return tmp_obj;
}
Complex operator*(const Complex&obj)
{
Complex tmpObj = *this;
tmpObj.realPart = (tmpObj.realPart * obj.realPart) - (tmpObj.imaginaryPart * obj.imaginaryPart);
tmpObj.imaginaryPart = (tmpObj.realPart * obj.imaginaryPart) + (tmpObj.imaginaryPart * obj.realPart);
return tmpObj;
}
private:
double realPart;
double imaginaryPart;
};
通常,採用兩個參數的運算符應該作爲免費的非成員函數來實現。這允許LHS操作數的隱式轉換。 –
我以爲C++有std :: complex年齡,爲什麼要實現自己的,是一個教育的事情嗎?希望稍後進行定製的內在數學優化? – Swift