DarkSpy
DarkSpy

Reputation: 15

complex number wrong output

I write this code with a class named Complex with the following methods:

a. Complex() // Default constructor returning 0

b. Complex(float im, float real)

c. float getImaginary() const

d. float getReal() const

e. Complex add(const Complex& rhs) const

f. Complex subtract(const Complex& rhs) const

g. Complex multiply(const Complex& rhs) const

#include <iostream>
using namespace std;

class Complex {
    private:
        float real;
        float imaginary;
    public:
        Complex();
        Complex(float real=0, float im=0);
        float GetReal() const;
        float GetImaginary() const;
        Complex Add(const Complex &rhs) const;
        Complex Subtract(const Complex &rhs) const;
        Complex Multiply(const Complex &rhs) const;
        void SetReal(float r);
        void SetImaginary(float i);
};
    Complex::Complex()
    {
        real=imaginary=0;
    }

    Complex::Complex(float realpart, float imaginarypart) 
    {
    SetReal(real);
    SetImaginary(imaginarypart);
    }

    void Complex::SetReal(float r) 
    {
    real = r;
    }

    void Complex::SetImaginary(float i) 
    {
        imaginary = i;
    }

    float Complex::GetReal() const
    {
        return real;
    }

    float Complex::GetImaginary() const {
        return imaginary;
    }

    Complex Complex::Add(const Complex &rhs) const {
    return Complex(GetReal() + rhs.GetReal(), GetImaginary() + rhs.GetImaginary());
    }

    Complex operator+(const Complex &rhs1, const Complex &rhs2) {
    return rhs1.Add(rhs2);
    }

    Complex Complex::Subtract(const Complex &rhs) const 
    { 
    return Complex(GetReal() - rhs.GetReal(), GetImaginary() - rhs.GetImaginary());
    }

    Complex operator-(const Complex &rhs1, const Complex &rhs2) 
    {
    return rhs1.Subtract(rhs2); 
    }

    Complex Complex::Multiply(const Complex &rhs) const
    {
    return Complex(GetReal() * rhs.GetReal(), GetImaginary() * rhs.GetImaginary());
    }
Complex operator*(const Complex &rhs1, const Complex &rhs2) 
    {
    return rhs1.Multiply(rhs2);
    }

int main() 
{
    Complex c();
    Complex x(-2,4);
    Complex y(5,6);
    Complex z = x + y;
    cout << z.GetReal() << '+' << z.GetImaginary() << 'i' << endl;

       Complex e = x - y;
    cout << e.GetReal() << '+' << e.GetImaginary() << 'i' << endl;

    Complex r = x * y;
    cout << r.GetReal() << '*' << r.GetImaginary() << 'i' << endl;
    return 0;
}

but i take these output

8.99944e-039+10i

8.99944e-039+-2i

8.99944e-039*24i

Can somebody help me for this error ?

Upvotes: 0

Views: 205

Answers (1)

463035818_is_not_an_ai
463035818_is_not_an_ai

Reputation: 122268

3 issues in your code:

Complex::Complex(float realpart, float imaginarypart) 
{
    SetReal(realpart);
    SetImaginary(imaginarypart);
}

causes the warning:

<source>:24:28: warning: unused parameter 'realpart' [-Wunused-parameter]
   24 |     Complex::Complex(float realpart, float imaginarypart)
      |    

Fix it by passing realpart to SetReal or rather use the member initializer list:

Complex::Complex(float realpart, float imaginarypart) : real(realpart),imaginary(imaginarypart)
{}

Next, this:

Complex c();

is the most vexing parse. It declares a function named c taking no parameters and retuning a Complex. It is not declaring a variable c of type Complex. Write

 Complex c;
 Complex c{};

to call the default constructor. However, you class has two default constructors:

    Complex();  
    Complex(float real=0, float im=0);

A default constructor is one that can be called without parameters and thats the case for both of these. Hence you currently cannot default construct a Complex, the constructors are ambigoous. I read your assignemnt as requiring you to provide two constructors:

    Complex();  
    Complex(float real, float im);  // no defaults !!

Then you will be able to default construct a Complex via Complex c; or Complex c{}; (but not via Complex c(); because thats a function declaration).

After fixing those, I get almost reasonable looking output: https://godbolt.org/z/x4xG8xzTf

Finally, your formula for multipliying two complex numbers is wrong. I'll leave that for you to fix it.

Upvotes: 1

Related Questions