In: Computer Science
Complex numbers using overload constructor and private parameters in C++
I don't know why my code does not compile......
please DO NOT CHANGE THE MAIN....
complexDriver.cpp
#include <iostream>
#include "complex.h"
using namespace std;
int main( ) {
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex c1, c2( 1.2, 4.9 ), c3( 2.2, 1.0 ), c4( -7.0, 9.6 ),
c5(8.1, -4.3),
c6(0.0, -7.1), c7(6.4), c8(0.0, 1.0), c9(0.0, 4.1), c10(0.0, -1.0),
c11;
cout << "c1 = " << c1 << endl;
cout << "c2 = " << c2 << endl;
cout << "c3 = " << c3 << endl;
cout << "c4 = " << c4 << endl;
cout << "c5 = " << c5 << endl;
cout << "c6 = " << c6 << endl;
cout << "c7 = " << c7 << endl;
cout << "c8 = " << c8 << endl;
cout << "c9 = " << c9 << endl;
cout << "c10 = " << c10 << endl;
cout << "c11 = " << c11 << endl;
}
complex.h
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
using std::istream;
using std::ostream;
class complex{
// Stream I/O
friend ostream& operator<<(ostream &, const complex
&);
friend istream& operator>>(istream&,
complex&);
public:
double getReal() const; // getter
void setReal(double x); // setter
double getImaginary() const;
void setImaginary(double y);
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex(double x= 0.0, double y= 0.0); // default constructor
private:
double Real;
double Imaginary;
};
#endif // COMPLEX_H
complex.cpp
#include <iostream>
#include "complex.h"
using std::cout;
using std::endl;
double complex::getReal() const{ // getter
return Real;
}
void complex::setReal(double x){ // setter
Real = x;
}
double complex::getImaginary() const{
return Imaginary;
}
void complex::setImaginary(double y){
Imaginary = y;
}
// X= real part, Y = imaginary part. real number = X+Yi
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex::complex(double x, double y){ // default constructor
setReal(x);
setImaginary(y);
}
// Stream I/O
ostream& operator<<(ostream &out, const complex
&c){
out<< c.x<<"+"<< c.y<< "i";
return out;
}
complexDriver.cpp
#include <iostream>
#include "complex.h"
#include "complex.cpp" /// CHANGEE ---- CHANGE --- CHANGE
using namespace std;
int main( ) {
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex c1, c2( 1.2, 4.9 ), c3( 2.2, 1.0 ), c4( -7.0, 9.6 ), c5(8.1, -4.3),
c6(0.0, -7.1), c7(6.4), c8(0.0, 1.0), c9(0.0, 4.1), c10(0.0, -1.0), c11;
cout << "c1 = " << c1 << endl;
cout << "c2 = " << c2 << endl;
cout << "c3 = " << c3 << endl;
cout << "c4 = " << c4 << endl;
cout << "c5 = " << c5 << endl;
cout << "c6 = " << c6 << endl;
cout << "c7 = " << c7 << endl;
cout << "c8 = " << c8 << endl;
cout << "c9 = " << c9 << endl;
cout << "c10 = " << c10 << endl;
cout << "c11 = " << c11 << endl;
}
complex.h
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
using std::istream;
using std::ostream;
class complex {
// Stream I/O
friend ostream& operator<<(ostream &, const complex &);
friend istream& operator>>(istream&, complex&);
public:
double getReal() const; // getter
void setReal(double x); // setter
double getImaginary() const;
void setImaginary(double y);
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex(double x = 0.0, double y = 0.0); // default constructor
private:
double Real;
double Imaginary;
};
#endif // COMPLEX_H
complex.cpp
#include <iostream>
#include "complex.h"
using std::cout;
using std::endl;
double complex::getReal() const { // getter
return Real;
}
void complex::setReal(double x) { // setter
Real = x;
}
double complex::getImaginary() const {
return Imaginary;
}
void complex::setImaginary(double y) {
Imaginary = y;
}
// X= real part, Y = imaginary part. real number = X+Yi
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex::complex(double x, double y) { // default constructor
setReal(x);
setImaginary(y);
}
// Stream I/O
ostream& operator<<(ostream &out, const complex &c) {
out << c.Real << "+" << c.Imaginary << "i"; //CHANGE --- CHANGE ---- CHANGE
return out;
}
OUTPUT:
PROBLEMS IN YOUR CODE:
1.) You did not include complex.cpp in your complexdriver file
2.) In operator overloading function of the complex class in complex.cpp file
COMBINED FILE
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
using std::istream;
using std::ostream;
using namespace std;
class complex {
// Stream I/O
friend ostream& operator<<(ostream &, const complex &);
friend istream& operator>>(istream&, complex&);
public:
double getReal() const; // getter
void setReal(double x); // setter
double getImaginary() const;
void setImaginary(double y);
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex(double x = 0.0, double y = 0.0); // default constructor
private:
double Real;
double Imaginary;
};
#endif // COMPLEX_H
double complex::getReal() const { // getter
return Real;
}
void complex::setReal(double x) { // setter
Real = x;
}
double complex::getImaginary() const {
return Imaginary;
}
void complex::setImaginary(double y) {
Imaginary = y;
}
// X= real part, Y = imaginary part. real number = X+Yi
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex::complex(double x, double y) { // default constructor
setReal(x);
setImaginary(y);
}
// Stream I/O
ostream& operator<<(ostream &out, const complex &c) {
out << c.Real << "+" << c.Imaginary << "i"; //CHANGE --- CHANGE ---- CHANGE
return out;
}
/// CHANGEE ---- CHANGE --- CHANGE
int main( ) {
// Ex) complex(4.0, 3.0) means 4.0+3.0i.
complex c1, c2( 1.2, 4.9 ), c3( 2.2, 1.0 ), c4( -7.0, 9.6 ), c5(8.1, -4.3),
c6(0.0, -7.1), c7(6.4), c8(0.0, 1.0), c9(0.0, 4.1), c10(0.0, -1.0), c11;
cout << "c1 = " << c1 << endl;
cout << "c2 = " << c2 << endl;
cout << "c3 = " << c3 << endl;
cout << "c4 = " << c4 << endl;
cout << "c5 = " << c5 << endl;
cout << "c6 = " << c6 << endl;
cout << "c7 = " << c7 << endl;
cout << "c8 = " << c8 << endl;
cout << "c9 = " << c9 << endl;
cout << "c10 = " << c10 << endl;
cout << "c11 = " << c11 << endl;
}