c++学习——(16)运算符重载

一.运算符重载的概念

  概念: 使原有的运算符赋予新的功能!     

  本质:函数重载

eg1: 用“+”符号一般用来做加法,但是也可以用来拼接字符串。下图中“+”、“=”、“<<”都进行了重载。

 

eg2:下图中我们可以让两个坐标相加得到一个新坐标,但是“+”本身并不具备这样的功能,可以通过运算符重载来让“+"有这样的功能;我们想直接输出一个坐标也可以通过重载输出运算符来实现

 

 

二.一元运算符重载的方法

关键字:operator

 

1.一元运算符——“-”的重载

成员函数的重载:首先要定义要定义一下如图一,然后实现的时候返回this指针就好了。最后使用的时候首先要实例化对象然后直接用“-”就好了,相当于调用了函数。

友元函数重载:

 

2.一元运算符——“++”的重载

 

a.前置++的重载(成员函数)

b.后置++:(int)是标识,表示是后置++,并没有什么实际意义!

 

三.二元运算符的重载

 

1.二元运算符“+”的重载

a.成员函数重载

b.友元函数重载

 

2.二元运算符——“<<”的重载(输出运算符)

a.友元函数重载

注意:输出运算符不能使用成员函数重载,因为成员函数重载的第一个参数要求是当前的对象,但是输出运算符第一个对象必须是ostream的!

 

3.二元运算符——“[]”的重载(索引运算符)

a.成员函数重载

注意:索引运算符不可以采用友元函数重载,友元函数重载第一个参数可以是成员函数重载中的那个this指针也可以是其他值,可是对于索引运算符来说第一个参数必须是this指针,这样才能传入索引,才能表达这个索引是当前的这个对象的数据的索引!

 

4.代码实例

#include <iostream>
using namespace std;

/**
* 定义Coordinate类
* 数据成员:m_iX,m_iY
* 成员函数:构造函数
* 重载--运算符,重载+运算符
*/
class Coordinate
{
public:
	Coordinate(int x, int y)
	{
		m_iX = x;
		m_iY = y;
	}
	// 前置--运算符重载
	Coordinate& operator--()  //前置--
	{
		m_iX--;
		m_iY--;
		return *this;
	}

	// 后置--运算符重载
	Coordinate& operator--(int)//后置--
	{
		Coordinate old(*this);
		m_iX--;
		m_iY--;
		return old;
	}

	// +号运算符重载
	Coordinate operator+(const Coordinate &coor)
	{
		Coordinate temp(0,0);
		temp.m_iX = this->m_iX + coor.m_iX;
		temp.m_iY = this->m_iY + coor.m_iY;
		return temp;
	}
	
public:
	int m_iX;
	int m_iY;
};

int main(void)
{
	Coordinate coor1(1, 3);
	Coordinate coor2(2, 4);
	Coordinate coor3(0, 0);

	coor1--;
	--coor2;
	coor3 = coor1 + coor2;

	cout << coor3.m_iX << endl;
	cout << coor3.m_iY << endl;
	system("pause");
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值