运算符重载

目录

加号运算符重载

左移运算符重载

++运算符重载

赋值运算符重载

关系运算符重载

函数调用运算符重载


目的:对已有的运算符重新进行定义,赋予另外一种功能,适应不同的数据类型

对于内置的数据类型,编译器知道如何运算

加号运算符重载

通过成员函数重载+号运算符

成员函数重载本质调用:

build03=build01.operator(build02

通过全局函数重载+号运算符

原理是一样的,就是把函数的名字换成operator+,就可以实现自定义数据类型相加的效果。

build03=operator+(build01,build02)

注意:运算符重载也可以发生函数重载

运算符重载就是赋予运算符更多的可能性,关键在于函数的命名

当你把函数参数传进去以后,编译器就会自动识别

左移运算符重载

采用全局函数的方式实现,成员函数的方式会出现p<<cout的情况

函数的返回值应该是cout,目的是可以连续输出,链式编程的思想

ostream& operator<<(ostream& cout, persion& persion1)
{
    cout<<"persion1.成员变量 = "<<persion1.成员变量<<endl;
    return cout;
}

++运算符重载

首先需要明确是前置++,还是后置++。

采用成员函数的方式来实现,目的是为了重载函数实现前后置++

前置++返回的是该对象的引用:

	persion& operator++()
	{
		++m_age;
		return *this;
	}

后置++返回的是值,返回的是临时拷贝的数据,如果返回引用的话,后续会出错

后置++与前置++是利用函数重载的功能实现的,后置++的形参是一个占位int,编译器会识别出来这是一个后置++。

persion operator++(int)
{   
    persion temp=*this;     
	m_age++;
	return temp;
}

赋值运算符重载

赋值运算符重载主要解决的是浅拷贝的问题,编译器默认的赋值是浅拷贝

如果有数据开辟在堆区上,需要自己实现深拷贝过程

同时还要注意清理原来堆区的空间

	persion& operator=(persion& persion99)
	{
		//先判断是否有属性在堆区上面,如果有的话,释放干净
		if (m_age = NULL)
		{
			delete m_age;
			m_age = NULL;
		}
		m_age = new int(*persion99.m_age);
		return *this;
	}

返回值是对象的引用,也是链式编程的思想

关系运算符重载

主要是判断自定义的数据类型之间是否相等

返回值是BOOL类型

bool operator==(persion& persion1)
	{
		if (m_name == persion1.m_name && m_age == persion1.m_age)
		{
			return true;
		}
		return false;
	}

如果不要求,函数重载的话,可以用全局函数的方式实现

函数调用运算符重载

函数调用运算符()也可以发生重载

重载后的使用方式特别像函数的调用,被称为仿函数

仿函数没有固定写法,十分灵活

示例一:打印类

class print
{
public:
	void operator()(string test)
	{
		cout << test << endl;
	}
};

使用时:print("函数调用运算符重载");

示例二:两数相加类

class add
{
public:
	int operator()(int num1, int num2)
	{
		//cout << "num1 +num2 = " << num1 + num2 << endl;
		return num1 + num2;
	}
};

匿名函数对象=匿名对象(该行结束就消除)+仿函数

    cout << add()(100, 200) << endl;

以上便是全部内容!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hskwcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值