利用运算符重载进行四则运算
#include "iostream"
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex(double r=0.0,double i=0.0);
void print();
Complex operator+(Complex a);
Complex operator-(Complex a);
Complex operator*(Complex a);
Complex operator/(Complex a);
};
int main()
{
double real,imag;
printf("请输入第一个复数\n");
printf("请输入实部及虚部\n ");
cin>>real>>imag;
Complex com1(real,imag);
printf("请输入第二个复数\n");
printf("请输入实部及虚部\n");
cin>>real>>imag;
Complex com2(real,imag);
Complex total;
total=com1+com2;
printf("加法结果\n");
total.print();
total=com1*com2;
printf("乘法结果\n");
total.print();
total=com1-com2;
printf("减法结果\n");
total.print();
total=com1/com2;
printf("除法结果\n");
total.print();
return 0;
}
Complex::Complex(double r,double i)
{
real=r;
imag=i;
}
Complex Complex::operator+(Complex a)
{
Complex temp;
temp.real = real+a.real ;
temp.imag = imag+a.imag ;
return temp;
}
Complex Complex::operator-(Complex a)
{
Complex temp;
temp.real = real-a.real ;
temp.imag = imag-a.imag ;
return temp;
}
Complex Complex::operator*(Complex a)
{
Complex temp;
temp.real = real*a.real - imag*a.imag ;
temp.imag = real*a.imag + imag*a.real ;
return temp;
}
Complex Complex::operator/(Complex a)
{
Complex temp;
temp.real = (real*a.real + imag*a.imag)/(a.real*a.real + a.imag* a.imag) ;
temp.imag = (imag*a.real - real*a.imag)/(a.real*a.real + a.imag* a.imag) ;
return temp;
}
void Complex::print()
{
cout<<real;
if(imag>0)
cout<<"+";
if(imag!=0)
cout<<imag<<"i"<<endl;
}
结果如下
什么是运算符重载
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
函数
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。
运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,在本例中就是+。返回类型是在使用这个运算符时获得的类型。在本例中,把两个矢量加起来会得到另一个矢量,所以返回类型就是Vector。对于这个+运算符重载,返回类型与包含类一样,但这种情况并不是必需的。两个参数就是要操作的对象。对于二元运算符(带两个参数),如+和-运算符,第一个参数是放在运算符左边的值,第二个参数是放在运算符右边的值。
C++语言对运算符重载进行了以下规定限制:
(1)只能重载C++语言中原先已定义的运算符,不能自己创造新的运算符进行重载。
(2)并不是所有的运算符都可以重载。不能进行重载的运算符:”.” “.*” “::” “?:”
(3)不能改变运算符原有的优先级和结合性。
(4)不能改变运算符对预定义类型数据的操作方式,但是可以根据实际需要,对原有运算符进行适当的改造和扩充。
(5)运算符重载有两种方式:重载为类的成员函数&重载为类的友元函数。
————————————————
原文链接:https://blog.csdn.net/qq_38289815/article/details/81508465
运算符重载的类型
(1)单目运算符重载
(2)双目运算符重载
(3)赋值运算符重载
(4)下标运算符重载
运算符重载的作用
了解决一些实际问题,程序员经常会定义一些新类型,即自定义类型,然而C++不允许生成新的运算符,因此为了实现对自定义类型的操作,就必须自己来编写函数说明某个运算符如何作用于这些数据类型,这样的程序可读性较差。针对这种情况,C++允许重载现有的大多数运算符,也就是允许给已有的运算符赋予新的含义,从而提高了C++的可扩展性,使得针对同样的操作,使用重载运算符比使用显式函数调用更能提高程序的可读性。
我的编程体验
这次花了四个小时左右来编写这一程序,加深了我对于运算符重载的理解,在编程过程中也遇到了一点困难,主要在于复数结构体的定义与实际使用化,由特殊数值到一般化情况的两个方面,在编程过程里面我确实体验到了逐渐丰富功能和构建程序的过程,这是一次比较有意义的编程。