面对对象程序设计之运算符重载(1)定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。

简介: 面对对象程序设计之运算符重载(1)定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。

【例】定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编程序,求两个复数之和。

#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   double get_real();
   double get_imag();
   void display();
  private:
   double real;
   double imag;
 };
double Complex::get_real()
{return real;}
double Complex::get_imag()
{return imag;}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
Complex operator + (Complex &c1,Complex &c2)
{
 return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c3=";
 c3.display();
 return 0;
}

回到这题,我们可以仿照上面编写程序。

定义一个复数类Complex,重载运算符“+”、“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别计算两个复数之和、差、积和商。


#include  <iostream>
using  namespace  std;
class  Complex
{
public:
  Complex(){real=0;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
  Complex  operator+(Complex  &c2);
  Complex  operator-(Complex  &c2);//减
  Complex  operator*(Complex  &c2);//乘
  Complex  operator/(Complex  &c2);//除
  void  display();
private:
  double  real;
  double  imag;
};

加法定义

Complex Complex::operator+(Complex &c2)

{ Complex cn; cn.real = real + c2.real; cn.imag = imag + c2.imag; return cn; }

减法定义

Complex Complex::operator-(Complex &c2)

{ Complex cn; cn.real = real - c2.real; cn.imag = imag - c2.imag; return cn; }


乘法定义

Complex Complex::operator*(Complex &c2)
{
    Complex cn;
    cn.real = real * c2.real-imag*c2.imag;
    cn.imag = imag *c2.real+real* c2.imag;
    return cn;
}

除法定义

 Complex Complex::operator/(Complex &c2)
{
    Complex cn;
    cn.real = (real * c2.real + imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
    cn.imag = (imag *c2.real - real* c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);
    return cn;
}

display定义

void Complex::display()

{ cout << "(" << real << "," << imag << "i)"<<endl; }


主函数

int  main()
{
    double  real, imag;
    cin >> real >> imag;
    Complex  c1(real, imag);
    cin >> real >> imag;
    Complex  c2(real, imag);
    cout << setiosflags(ios::fixed);
    cout << setprecision(2);
    Complex  c3 = c1 + c2;
    cout << "c1+c2=";
    c3.display();
    c3 = c1 - c2;
    cout << "c1-c2=";
    c3.display();
    c3 = c1*c2;
    cout << "c1*c2=";
    c3.display();
    c3 = c1 / c2;
    cout << "c1/c2=";
    c3.display();
    return  0;
}

其实,运算符重载很简单,搞懂加法,其他就套就可以了。

代码如下

#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator +(Complex &c2);
Complex operator -(Complex &c2);
Complex operator *(Complex &c2);
Complex operator /(Complex &c2);
void display();
void set();
private:
double real;
double imag;
};
Complex Complex::operator +(Complex &c2)
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
} 
Complex Complex::operator -(Complex &c2)
{
Complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return c ;
} 
Complex Complex::operator *(Complex &c2)
{
Complex c;
c.real=real*c2.real-imag*c2.imag;
c.imag=real*c2.imag+imag*c2.real;
return c;
}      
Complex Complex::operator /(Complex &c2)
{
Complex c;
c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
return c;
} 
void Complex::set()
{
cout<<"input real=";cin>>real;
cout<<"  imag=";cin>>imag;
}
void Complex::display()
{
    cout<<"("<<real<<","<<imag<<"i)"<<endl;
}  
int main()
{
Complex c1,c2,c3,c4,c5,c6;
c1.set();
c2.set();
c3=c1+c2;
c4=c1-c2;
c5=c1*c2;
c6=c1/c2;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c1+c2=";c3.display();
cout<<"c1-c2=";c4.display();
cout<<"c1*c2=";c5.display();
cout<<"c1/c2=";c6.display();
return 0;
} 


相关文章
【C++之运算符重载1】复数类 Complex 重载运算符 “+”
【C++之运算符重载1】复数类 Complex 重载运算符 “+”
|
Java
Java实现复数Complex的加减乘除运算、取模、求幅角角度
Java实现复数Complex的加减乘除运算、取模、求幅角角度
185 0
Java实现复数Complex的加减乘除运算、取模、求幅角角度
艾伟_转载:.NET 4.0 Beta2中的BigInteger和Complex类
.NET4.0 Beta2中提供了新的System.Numerics命名空间,对应于System.Numerics.dll。该命名空间下就两个类BigInteger和Complex,我们来简单了解下这两个类的用法。
1003 0
|
6月前
|
XML JSON JavaScript
什么是 SAP UI5 框架的 Complex Parser
什么是 SAP UI5 框架的 Complex Parser
48 0
|
6月前
|
JavaScript 开发工具
SAP UI5 complex parser 只有在 1.26 版本之后才能使用
SAP UI5 complex parser 只有在 1.26 版本之后才能使用
27 0
|
JavaScript 开发工具
SAP UI5 complex parser 只有在 1.26 版本之后才能使用(2)
SAP UI5 complex parser 只有在 1.26 版本之后才能使用
SAP UI5 complex parser 只有在 1.26 版本之后才能使用(1)
SAP UI5 complex parser 只有在 1.26 版本之后才能使用
SAP APF框架错误消息Filter is too complex的处理
SAP APF框架错误消息Filter is too complex的处理
SAP APF框架错误消息Filter is too complex的处理
SAP CRM One Order里Complex Set的一个例子:Partner Set
SAP CRM One Order里Complex Set的一个例子:Partner Set
107 0
SAP CRM One Order里Complex Set的一个例子:Partner Set

热门文章

最新文章