Solved

# Overloading the = operator for my complex number class in c++

Posted on 2007-11-24

I am working on an assignment for my c++ class where I am doing operator overloading. I have everything working but the = operator, I am not sure how to make it work. I need to be able to do something like Complex myNumber = 4.4 5.5 and have it store that. I have attached my code below.

I am being told too many identifiers on my = code... can you see aproblem?

#include <iostream>

using std::cout;

#include"complex1.h"// Complex class definition

// constructor

Complex::Complex( double realPart, double imaginaryPart )

: real( realPart ),

imaginary( imaginaryPart )

{

// empty body

} // end Complex constructor

// addition operator

Complex Complex::operator+( const Complex &operand2 ) const

{

return Complex( real + operand2.real,

imaginary + operand2.imaginary );

} // end function operator+

// subtraction operator

Complex Complex::operator-( const Complex &operand2 ) const

{

return Complex( real - operand2.real,

imaginary - operand2.imaginary );

} // end function operator-

// I used the algorhthym posted in our conference. I had something similar but my parens were off I think :)

Complex Complex::operator*( const Complex &operand2 ) const

{

return Complex( ((real * operand2.real)-(imaginary * operand2.imaginary)), ((real * operand2.imaginary)+(operand2.real * imaginary)) );

} // end function operator*

Complex Complex::operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber ) const

{

complexNumber.getReal(realPar);

complexNumber.getImaginary(imaginaryPart);

return complexNumber

}

std::ostream& operator<<(std::ostream& stream,const Complex& complexNumber)

{

stream << "(" << complexNumber.getReal() << " , " << complexNumber.getImaginary()<<")" << std::endl;

return stream;

}

std::istream& operator>>(std::istream& stream,Complex& value)

{

double realPart, imaginaryPart;

stream >> realPart >> imaginaryPart;

value.getReal(realPart);

value.getImaginary(imaginaryPart);

return stream;

}

bool Complex::operator==( const Complex &operand2 ) const

{

if (real == operand2.real && imaginary == operand2.imaginary)

return true;

else

return false;

}

bool Complex::operator!=( const Complex &operand2 ) const

{

if (real != operand2.real || imaginary != operand2.imaginary)

return true;

else

return false;

}

-------------------------------

#ifndef COMPLEX1_H

#define COMPLEX1_H

class Complex {

public:

Complex( double = 0.0, double = 0.0 ); // constructor

Complex operator+( const Complex & ) const; // addition

Complex operator-( const Complex & ) const; // subtraction

Complex operator*( const Complex &operand2 ) const; // Multiplication

Complex operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber );

bool operator==( const Complex &operand2 ) const;

bool operator!=( const Complex &operand2 ) const;

friend std::ostream &operator<<(std::ostream &stream, const Complex &value);

friend std::istream &operator>>(std::istream &stream, Complex &value);

//accessor functions

double getReal() const { return real; }

double getImaginary() const { return imaginary; }

void getReal(double r) { real = r; }

void getImaginary(double i) { imaginary = i; }

private:

double real; // real part

double imaginary; // imaginary part

}; // end class Complex

#endif