C++笔记-运算符重载

目录

加号运算符重载

 左移运算符重载

 递增运算符重载

赋值运算符重载

关系运算符重载

函数调用运算符重载


概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据运算

运算符重载也可以函数重载

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

加号运算符重载

operator+

 左移运算符重载

operator<<

作用:配合友元可以输出自定义数据类型

不会利用成员函数重载<<运算符,因为无法实现<<在左侧

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

 递增运算符重载

operator++

 重载前置++运算符

先递增,再运算

返回的是递增后的引用

//返回引用是为了一直对一个数据进行递增操作
	myInt& operator++() {
		num++;
		return *this;
	}

重载后置++运算符

先运算,再递增

返回的是递增前的

	//int代表占位参数,用于区分前置和后置递增
	myInt operator++(int) {
		myInt temp = *this;
		num++;
		return  temp;
	}

赋值运算符重载

operator=

编译器默认提供的赋值运算符重载是浅拷贝

因此在析构时,会造成堆区内存重复释放的报错

class Person{
private:
	int* num;
public:
	Person(int age) {
		num =new int;
		*num = age;
	}

	~Person() {
		if (num != NULL) {
			delete num;
			num = NULL;
		}
	}

	Person& operator=(Person& p) {
		//如果在堆区已有内存,先释放
		if (num != NULL) {
			delete num;
			num = NULL;
		}
		num = new int;
		*num = *p.num;
		return *this;
    //返回的是引用,可以实现连续赋值
	}
	
};

关系运算符重载

函数调用运算符重载

operator()

由于使用起来非常像函数调用,因此叫仿函数

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

int main() {
	MyPrint myPrint;
	myPrint("hello World");
}
  • 函数调用运算符重载在类里
  • 使用时,先创建一个这个类的对象,对象(仿函数参数) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值