Код:
#include <iostream>
using namespace std;

class ComplexNum
{
      public:
             
      /*****Constructors*****/       
      ComplexNum();
      ComplexNum(float);
      ComplexNum(float, float);
      ComplexNum(const ComplexNum&);
      
      /*****Unary operators*****/       
      ComplexNum& operator=(const ComplexNum&);
      ComplexNum operator-();
      
      /*****Binary operators with complex number as rhs*****/  
      ComplexNum operator+(const ComplexNum&);
      ComplexNum operator-(const ComplexNum&);
      ComplexNum operator*(const ComplexNum&);
      ComplexNum operator/(const ComplexNum&);
      
      /*****Binary operators with float as rhs*****/  
      ComplexNum operator+(const float);
      ComplexNum operator-(const float);
      ComplexNum operator*(const float);
      ComplexNum operator/(const float);
      
      /*****Other Methods*****/
      void Print();
      
      
      /*****Members*****/
      private:
      float m_rVal, m_iVal;
};

//CONSTRUCTORS
ComplexNum::ComplexNum()
{
   m_rVal = 0;
   m_iVal = 0;
}

ComplexNum::ComplexNum(float realNum)
{
   m_rVal = realNum;
   m_iVal = 0;
}

ComplexNum::ComplexNum(float realNum, float imagNum)
{
   m_rVal = realNum;
   m_iVal = imagNum;
}

ComplexNum::ComplexNum(const ComplexNum& rhs)
{
   m_rVal = rhs.m_rVal;
   m_iVal = rhs.m_iVal;                
}


ComplexNum& ComplexNum::operator=(const ComplexNum& rhs)
{
   if(this!=&rhs)
   {
       m_rVal = rhs.m_rVal;
       m_iVal = rhs.m_iVal;  
   }
   return *this;
}

ComplexNum ComplexNum::operator-()
{
    ComplexNum result(-(*this).m_rVal, -(*this).m_iVal);
    return result;
}


//UNARY OPERATORS
ComplexNum ComplexNum::operator+(const ComplexNum& rhs)
{
    ComplexNum result((*this).m_rVal+rhs.m_rVal, (*this).m_iVal+rhs.m_iVal);
    return result;  
}

ComplexNum ComplexNum::operator-(const ComplexNum& rhs)
{
    ComplexNum result((*this).m_rVal-rhs.m_rVal, (*this).m_iVal-rhs.m_iVal);
    return result;                                 
}

ComplexNum ComplexNum::operator*(const ComplexNum& rhs)
{
    ComplexNum result((*this).m_rVal*rhs.m_rVal - (*this).m_iVal*rhs.m_iVal, (*this).m_rVal*rhs.m_iVal + (*this).m_iVal*rhs.m_rVal);
    return result;               
}

ComplexNum ComplexNum::operator/(const ComplexNum& rhs)
{
    float denom = rhs.m_rVal*rhs.m_rVal + rhs.m_iVal*rhs.m_iVal;
    if(denom!=0)
    {
        ComplexNum result(((*this).m_rVal*rhs.m_rVal + (*this).m_iVal*rhs.m_iVal)/denom, ((*this).m_iVal*rhs.m_rVal - (*this).m_rVal*rhs.m_iVal)/denom);
        return result;
    }   
    else
    {
        cout<<"Error, cannot divide by 0";
        ComplexNum result(0, 0);
        return result;
    }
}


//BINARY OPERATORS
ComplexNum ComplexNum::operator+(const float rhs)
{
     ComplexNum tmpVal(rhs, 0);
     return *this+tmpVal;
}

ComplexNum ComplexNum::operator-(const float rhs)
{
     ComplexNum tmpVal(rhs, 0);
     return *this-tmpVal;      
}

ComplexNum ComplexNum::operator*(const float rhs)
{
     ComplexNum tmpVal(rhs, 0);
     return *this*tmpVal;     
}

ComplexNum ComplexNum::operator/(const float rhs)
{
     ComplexNum tmpVal(rhs, 0);
     return *this/tmpVal;      
}


//OTHER METHODS
void ComplexNum::Print()
{
     cout<<m_rVal<<" + i("<<m_iVal<<")";
}
          

//TEST PROGRAM       
int main()
{
    int k=13;
    
    ComplexNum tmp(2, 3);
    ComplexNum tmp2(k, 7);
    
    tmp.Print(); //Print
    cout<<"\n";
    tmp2.Print(); //Print
    
    cout<<"\n";
    (tmp+tmp2).Print(); //Addition
    cout<<"\n";
    (tmp-tmp2).Print(); //Subtraction
    cout<<"\n";
    (tmp*tmp2).Print(); //Multiplication
    cout<<"\n";
    (tmp/tmp2).Print(); //Division    
    
    cout<<"\n";
    (tmp+3).Print(); //Addition with int
    cout<<"\n";
    (tmp-4).Print(); //Subtraction with int
    cout<<"\n";
    (tmp*5).Print(); //Multiplication with int
    cout<<"\n";
    (tmp/6).Print(); //Division with int
    
    cout<<"\n";
    (-tmp).Print(); //Unary minus
    cout<<"\n";
    tmp=tmp2; //Assignment
    tmp.Print();
    
    int pause;
    cin>>pause;
    return 0;
}