第七课 重载操作符

一、基本使用方法

重载操作符本质上是一个特殊的函数,函数名是operator后接要重载的操作符

参数要根据操作符的使用规则来,要和原来的数量、顺序、类型保持一致

一般要有返回类型,为了和后续操作符继续操作

告诉编译器,遇到该操作符时,应当调用该函数,是对原来操作符的一个扩展和补充

#include<iostream>
using namespace std;

class CTest{
public:
	int m_a;

	CTest()
	{
		m_a=20;
	}

	int operator+(/*const CTest *this*/int a)
	{
		return this->m_a+a;
	}
	int operator+=(/*const CTest *this*/int a)
	{
		return this->m_a+=a;
	}
	int operator=(/*const CTest *this*/int a)
	{
		return this->m_a=a;
	}
	//----------------------------------------
	int operator++()//左++
	{
		return ++m_a;
	}
	int operator++(int)//右++,int没有实际的作用,就是为了和左++区分开来
	{
		return m_a++;
	}
};

int main()
{
	int a=10;
	CTest tst;

	int b;
	
	b=tst+a;
	cout<<b<<endl;
	tst+=10;
	cout<<tst.m_a<<endl;

	CTest tst2;
	tst2=tst+10;
	cout<<tst2.m_a<<endl;

	//------------------
	CTest tst3;
	int c=0;
	c=++tst3;
	cout<<c<<"   "<<tst3.m_a<<endl;//21 21
	c=tst3++;
	cout<<c<<"   "<<tst3.m_a<<endl;//21 22
	return 0;
}

二、类外重载操作符

int operator+(int a,CTest tst)//不能和类内的相同,会产生歧义
{
	return tst.m_a+a;
}
ostream& operator<<(ostream &os,CTest &tst)
{
	os<<tst.m_a;
	return os;
}
istream& operator>>(istream &is,CTest &tst)
{
	is>>tst.m_a;
	return is;
}

输入输出操作符通常在类外重载

其中形参是结构体或类的时候,要用引用,避免浅拷贝问题

类内和类外重载操作符的区别:
1.类内:作为类成员函数,有一个默认的this指针作为第一个参数,省略了一个参数,类对象匹配this

2.类外:作为全局的重载操作符函数,相比于类内少了一个默认的this指针参数,所以需要比类内多一个参数,且参数的顺序不需要固定了,可以进行调整,但是注意不能和类内的重复,避免产生歧义。

在类外重载操作符,必须至少含有一个结构体或类等自定义类型的参数

三、重载操作符使用时的注意事项

1.重载操作符不能改变操作符原来的使用规则,原来有几个操作数,现在就应该有几个,原来在左边,现在依旧应该在左边

2.重载操作符函数不允许有默认值,否则改变了操作符的用法

3.重载操作符不允许改变原来的优先级和结合性

4.= [ ] () ->只能在类内重载

5.sizeof   ?:    .    .*    :: 不能重载

6.对于同一个操作符来说,参数不同可能含义不同

四、对象类型转换

重载某个类型,定义该类对象就可以像这个类型的变量一样去使用

类型转换函数 operator后加类型 无参数 无返回值

//类内
operator int()
{
    return m_a
}

相对于重载操作符函数来说,重载操作符函数的优先级更高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值