C++中的运算符重载

#include<iostream>
using namespace std;

/**
运算符重载,就是为运算符提供新的运算功能。这在java中是没有的。
运算符的重载实质上是函数的重载。

格式如下:
函数的返回类型 operator 运算符名称(形参列表);
这里的运算符名称一般是系统预定义的已有的名称。
比如要实现复数相加的功能函数,可以重载+

虽然重载运算符所实现的功能完全可以使用函数来实现,它本质上也是使用的函数来实现的,但是
使用函数运算符的特点是使得用户程序易与编写,阅读和维护

如何判断此时的运算符的功能呢?
是根据表达式的上下文决定的,运算符两侧的数据类型决定的。

重载运算符的规则:
1.C++不允许用户自定义定义新的运算符,只能对C++已有的运算符进行重载。
2.不允许重载的运算符有5个:
	.
	.*j
	::
	sizeof
	?:
3.重载运算符的必须和用户自定义的对象一起使用。
4.应该使得重载运算符的功能类似与标准类型数据时所实现的功能


对于标准的数据类型转换,系统有它自己的规则,但是对于用户自己定义的数据类型,系统该如何将其转为
其他数据类型呢?
答案是使用转换构造函数
*/

//一个复数类
class Complex{
private :
	double real;
	double img;

public:
	Complex(){
		this->real = 0;
		this->img = 0;
	};

	Complex(double real,double img){
		this->real = real;
		this->img = img;
	}

	//声明一个运算符重载函数
	Complex operator +(Complex &c2);
	void display();

	friend ostream& operator <<(ostream& os,Complex& cp);
};

ostream& operator <<(ostream& output,Complex& c){
	output << "(" << c.real << "+" << c.img << "i)";
	return output;
}

//在类外定义重载运算符函数,函数名是operator +
Complex Complex :: operator +(Complex &c2){
	Complex c;
	c.real = this->real + c2.real;
	c.img = this->img + c2.img;
	return c;
};




void Complex::display(){
	cout << this->real << "+" << this->img << +"i" << "\n";
}


int main(){
	Complex c1(3,4), c2(5,6), c3;
	//这里会调用Complex中定义好的重载运算符+
	c3 = c1 + c2;
	c1.display();
	c2.display();
	c3.display();

	cout << c3; 
	return 0; 
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值