Complex Number operations using operator overloading & friend function (C++)
April 23, 2016
Categorised in: C++ Codes, OOMP Codes
/* Design a C++ class complex with data members for real and imaginery parts provide default and parameterized constructors. Write a program to perform arithmetic operations of two complex numbers using operator overloading. Use either member function or friend function. */ /* Theory: Operator overloading through member function: Binary -> 1 formal parameter, Unary -> 0 formal parameter Operator overloading through friend function: Binary -> 2 formal parameter, Unary -> 1 formal parameter */ #include<iostream> using namespace std; class complex { double real; double imaginery; public: static int num; complex(){ real = 0; imaginery = 0; } complex(double a1, double a2){ real = a1; imaginery = a2; } complex operator +(complex c){ complex temp; temp.real = this->real + c.real; temp.imaginery = this->imaginery + c.imaginery; return(temp); } complex operator *(complex c){ complex temp; temp.real = (this->real * c.real) – (this->imaginery * c.imaginery); temp.imaginery = (this->imaginery * c.real) + (this->real * c.imaginery); return(temp); } complex operator /(complex c){ complex temp; //OR we can take common div: int div = (c.real*c.real) + (c.imaginery*c.imaginery); temp.real=((real*c.real)+(imaginery*c.imaginery))/((c.real*c.real)+(c.imaginery*c.imaginery)); temp.imaginery=((imaginery*c.real)-(real*c.imaginery))/((c.real*c.real)+(c.imaginery*c.imaginery)); return(temp); } friend complex operator -(complex c1, complex c2){ complex temp; temp.real = c1.real – c2.real; temp.imaginery = c1.imaginery – c2.imaginery; return(temp); } void display(int flag){ if(flag == 1) cout<<"Addition:"<<endl; else if(flag == 2) cout<<"Subtraction:"<<endl; else if(flag == 3) cout<<"Multiplication:"<<endl; else if(flag == 4) cout<<"Division:"<<endl; else{ cout<<"Operand "<<num<<":"<<endl; } cout<<this->real<<"+i"<<this->imaginery<<endl; } }; int complex::num; int main(){ complex::num = 1; complex obj1(3, 2); obj1.display(0); complex::num++; complex obj2(6, 4); obj2.display(0); complex obj3; obj3 = obj1 + obj2; obj3.display(1); obj3 = obj2 – obj1; //obj2(obj1) i.e. obj2 is invoking object obj3.display(2); obj3 = obj1 * obj2; obj3.display(3); obj3 = obj2/obj1; obj3.display(4); return 0; }
Pratik Kataria is currently learning Springboot and Hibernate.
Technologies known and worked on: C/C++, Java, Python, JavaScript, HTML, CSS, WordPress, Angular, Ionic, MongoDB, SQL and Android.
Softwares known and worked on: Adobe Photoshop, Adobe Illustrator and Adobe After Effects.