原创 中国大学MOOC程序设计与算法(三):C++ 面向对象程序设计 第四周 运算符重载 笔记 之 运算符重载的基本概念

第四周 运算符重载
1.运算符重载的基本概念
2.赋值运算符的重载
3.运算符重载为友元函数
4.运算符重载实例:可变长数组类的实现
5.流插入运算符和流提取运算符的重载
6.类型转换运算符、自增自减运算符的重载

1.运算符重载的基本概念

运算符重载的需求

C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型
+、-、*、/、%、^、&、~、!、|、=、<<、>>、!=、……
在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的。
有时会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。
例如:complex_a和complex_b是两个复数对象,求两个复数的和, 希望能直接写:complex_a + complex_b

运算符重载

运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。
运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象。
同一个运算符,对不同类型的操作数,所发生的行为不同。
complex_a + complex_b 生成新的复数对象
5 + 4 = 9

运算符重载的形式

运算符重载的实质是函数重载
可以重载为普通函数,也可以重载为成员函数
把含运算符的表达式转换成对运算符函数的调用。
把运算符的操作数转换成运算符函数的参数。
运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。

重载为成员函数时 , 参数个数为运算符目数减一,作用于当前对象 。
重载为普通函数时 , 参数个数为运算符目数 ,作用于运算符两侧的对象。

运算符重载的形式

返回值类型 operator 运算符(形参表)
{
……
}
例子:

class Complex
{
	public:
		double real,imag;
		Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) { }
		Complex operator-(const Complex & c);
};
Complex operator+( const Complex & a, const Complex & b)//重载为普通全局函数
{
	return Complex( a.real+b.real,a.imag+b.imag); // 返回一个临时对象
}
Complex Complex::operator-(const Complex & c)//重载为成员函数
{
	return Complex(real - c.real, imag - c.imag); // 返回一个临时对象
}
int main()
{
	Complex a(4,4),b(1,1),c;
	c = a + b; // 等价于c=operator+(a,b);
	cout << c.real << "," << c.imag << endl;
	cout << (a-b).real << "," << (a-b).imag << endl;
	//a-b 等价于a.operator-(b)
	return 0;
}
输出:
5,5
3,3
//c = a + b; 等价于c=operator+(a,b);
//a-b 等价于a.operator-(b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值