利用运算符重载进行四则运算

利用运算符重载进行四则运算

#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++的可扩展性,使得针对同样的操作,使用重载运算符比使用显式函数调用更能提高程序的可读性。

我的编程体验
这次花了四个小时左右来编写这一程序,加深了我对于运算符重载的理解,在编程过程中也遇到了一点困难,主要在于复数结构体的定义与实际使用化,由特殊数值到一般化情况的两个方面,在编程过程里面我确实体验到了逐渐丰富功能和构建程序的过程,这是一次比较有意义的编程。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言中的运算符重载是指对已有的运算符重新定义其操作行为。然而,C语言并不支持运算符重载的概念。在C语言中,我们不能直接通过重载运算符来定义自定义型的加减运算。相反,我们需要使用函数来实现运算符的功能。 如果您想要对自定义进行加减运算,您可以通过定义相应的函数来实现。例如,如果您有一个自定义的结构体型,您可以为该结构体定义一个加法函数和一个减法函数来实现加减运算。 下面是一个示例代码,演示如何在C语言中实现自定义型的加减运算: ```c #include <stdio.h> // 自定义结构体型 typedef struct { int x; int y; } Point; // 加法函数 Point add(Point p1, Point p2) { Point result; result.x = p1.x + p2.x; result.y = p1.y + p2.y; return result; } // 减法函数 Point subtract(Point p1, Point p2) { Point result; result.x = p1.x - p2.x; result.y = p1.y - p2.y; return result; } int main() { Point p1 = {2, 3}; Point p2 = {4, 5}; // 调用加法函数 Point sum = add(p1, p2); printf("Sum: %d, %d\n", sum.x, sum.y); // 调用减法函数 Point diff = subtract(p1, p2); printf("Difference: %d, %d\n", diff.x, diff.y); return 0; } ``` 在上面的代码中,我们定义了一个名为`Point`的自定义结构体型,并为它定义了一个加法函数`add`和一个减法函数`subtract`。通过调用这些函数,我们可以对`Point`型的变量进行加减运算。 因此,在C语言中,我们不能直接进行运算符重载实现加减运算,但可以通过定义函数来实现相同的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值