运算符重载

加号运算符重载

作用:实现两个自定义类型数据相加的运算(对应内置的数据类型,编译器知道如果运算)
实现:Person p3 = p1+p2;

  • 成员函数重载
 Person operator+(Person &p){
		Person temp;
		temp.m_A = this->m_A+p.m_A;
		return temp;
}
  • 全局函数重载
 Person operator+(Person &p1,Person &p2){
		Person temp;
		temp.m_A = p1.m_A+p2.m_A;
		return temp;
}

运算符重载也可以发生函数重载:Person p3 = p1+10; //person+int

 Person operator+(Person &p1,int num){
		Person temp;
		temp.m_A = p1.m_A+num;
		return temp;
}

在这里插入图片描述

左移运算符重载

作用:可以输出自定义数据类型
不会利用成员函数重载<<运算符,(无法实现cout<<)–成员函数无法传入对象p。(p.operator<<(&p)).
p.operator<<(cout) —p<<cout

只能用全局函数重载左移运算符。

void operator<<(ostream &cout,Person &p){//本质operator<<(cout,p)  //简化:cout<<p;
cout<<"m_A"<<p.m_A;

}
cout<<p;

若函数返回值为void,则无法cout<<p<<endl;(链式)

ostream& operator<<(ostream &cout,Person &p){//本质operator<<(cout,p)  //简化:cout<<p;
	cout<<"m_A"<<p.m_A;
	return cout;
}
cout<<p<<endl;

递增运算符重载

作用:通过重载递增运算符,实现自己的整型数据

重载前置++

  • 利用成员函数重载
Person& operator++(){
	m_a++;
	return *this
}

返回值加引用(Person& ),对变量进行多次++时,是对一个数据进行操作。

重载后置++

Person operator(int){//int占位参数,可以用于区分前置和后置(重载)
	//先返回结果再输出
	Person num = *this;
	m_a++;
	return num;
}

必须返回值(Person),num局部变量,运行完就被释放掉了。

赋值运算符重载

C++编译器默认会给一个类添加4个函数:4.赋值运算符operator=对属性进行值拷贝。
Person 类:
p2 = p1;//赋值操作–值拷贝

利用深拷贝,解决浅拷贝带来的问题
在这里插入图片描述

  • 成员函数重载
Person&  operator=(Person &p){//m_a是指针
//编译器提供浅拷贝
//m_a = p.m_a;
//应该先判断是否有属性在堆区,如果有先释放干净,然后再深拷贝。
	if(m_a != NULL){
		delete m_a;
		m_a = NULL;
	}
//深拷贝
	m_a = new int(*p.m_a);
	return *this
}

解决p3 = p2 = p1的问题,返回对象本身Person& 。

关系运算符重载

类似前面的写法。

bool  operator==(Person &p){

	return ture
}

函数调用运算符重载(())

  • 函数调用运算符()也可以重载
  • 由于重载后使用的方式非常像函数的调用,所以称为仿函数
  • 仿函数没有固定写法,非常灵活
void operator()(string test){
	cout<<test<<endl;
}

Person p;
p("my");//输出my

//匿名函数对象
Person()(“my”)//当前行执行完立即释放

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值