c++操作符重载总结笔记

1. 不能重载的运算符: “.” “:: ” “?:” “sizeof

2. 前置++与后置++

		// 前置++
		Object& operator++(){
			a++;
			return *this;
		}
		// 后置++
		Object operator++(int){
			Object temp(*this);
			this->a++;
			return temp;
		}

3. 重载->和*

class SmartPointer{
		public:
			SmartPointer(Person* person){
				this->pPerson = person;
			}
			//重载指针的->、*操作符
			Person* operator->(){
				return pPerson;
			}
			Person& operator*(){
				return *pPerson;
			}
			~SmartPointer(){
				if (pPerson != NULL){
					delete pPerson;
				}
			}
		public:
			Person* pPerson;
		};

4. 赋值(=)运算符重载

//重载赋值运算符
			Person& operator=(const Person& person){
				this->mID = person.mID;
				this->mAge = person.mAge;
				return *this;
			}
  1. 重载赋值运算符时,要考虑本对象在赋值之前是否有堆内存,不能简单替换指针
  2. Person person2 = person1; // 调用拷贝构造、
  3. person2 = person1; // 调用operator=函数
  4. 如果没有重载运算符,编译器会自动创建默认的赋值运算符重载函数,行为类似于拷贝默认构造,进行简单的值拷贝

5. 函数调用符号()重载

	- 即为仿函数

6. 不要重载&&、||

  1. 原因:无法实现短路原则。短路原则即保证首先计算左边,如果能够决定结果,则无需计算右边,而且保证不需要

7. 总结:

  1. =、[]、()、->操作符只能通过成员函数进行重载
  2. <<和>>只能通过全局函数配合友元函数进行重载(cout << )
  3. 不要重载 && 和 || 操作符因为无法实现短路原则
  4. 常规建议
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值