【c++】运算符重载【赋值、关系、调用】

1. 赋值运算符重载

假如我们有一个类Person,其中有int*类型的变量a,实例化成员p1和p2,现在想让p2的值赋值给p1:

class Person {
public:
	int* a;
};

直接赋值如下,但会遇到一个问题,就是当我们释放p2时,再释放p1时会报错,原因在于这种赋值操作是浅拷贝,而非深拷贝,于是我们应该考虑重载赋值运算符实现深拷贝

p1 = p2;

注意我们对=进行重载时,重载函数一定要写在类里,即它必须是成员函数!重载代码如下:

Person& operator = (Person& p) {
		//先判断是否有属性在堆区已经被创建,如果有,则先释放,再做深拷贝
		if (a == NULL) {
			delete a;
			a = NULL;
		}
		a = new int(*p.a);
		return *this;
	}

2. 关系运算符重载

比如我们需要比较两个实例化对象中的成员值是否相同,来实现比较这两个对象是否相同,我们就需要重载==运算符,不等关系或者大于小于关系都是同样的,代码如下

bool operator == (Person& p) {
		// 判断
	}

注意上述重载函数应该作为成员函数,也就是说要写在class里面。

3. 函数调用运算符重载

函数调用运算符就是小括号:(),这样做能使得我们利用类的实例化对象来直接作为函数调用(在效果上和函数调用是类似的,称为仿函数)
在class里写:

void operator()(string str) {
		cout << str << endl;
	}

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 05:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 05:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 05:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 05:02:02       18 阅读

热门阅读

  1. React富文本编辑器开发(十)变换

    2024-03-13 05:02:02       15 阅读
  2. 力扣2834. 找出美丽数组的最小和

    2024-03-13 05:02:02       19 阅读
  3. springBoot mybatis-plus整合

    2024-03-13 05:02:02       18 阅读
  4. docker的快速入门教程

    2024-03-13 05:02:02       23 阅读
  5. Unity3D 多线程定时器的原理与实现详解

    2024-03-13 05:02:02       21 阅读
  6. RAG系统与LLM评判及合成数据集创建简介

    2024-03-13 05:02:02       17 阅读
  7. ms office学习记录8:Excel㈡

    2024-03-13 05:02:02       20 阅读