【c++初阶】类与对象(中)-????赋值重载函数

????运算符重载

????定义

运算符重载是C++中一项强大的特性,它允许程序员重新定义或重载大部分C++内置的运算符,以便它们能用于用户自定义的类型。通过运算符重载,可以使自定义类型的对象像内置类型一样使用运算符,从而提高代码的可读性和易用性。

????特点

  1. 不能通过连接其他符号来创建新的操作符:比如operator@
  2. 重载操作符必须有一个类类型参数
  3. 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。
  4. 作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
  5. (.* :: sizeof ? : .) , 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。

????实际用法

  1. 内置类型对象可以直接使用各种运算符,内置类型都是简单类型。

在这里插入图片描述
2. 自定义类型需要用关键字才能用运算符:

在这里插入图片描述
在这里插入图片描述
下面那种是operator不放在类里面的写法,不过operator基本都写在类里面,所以还有一种写法:
在这里插入图片描述

当然不仅仅只有这一种,还有减法等等。
在这里插入图片描述
大家从程序执行结果来看运算符==是看两者是否相等,相等返回1,不相等返回0。而<和>也是同样如此。返回的都是布尔值。

实际上operator是一个函数,如:

在这里插入图片描述

在这里插入图片描述
这就是operator在类中的写法。

有的人可能会问传过去的不是两个参数吗,为什么在operator中只接收了一个参数?问出这个问题的可能是忘了C++中的this指针,this指针已经指向了第一个参数,所以不用传第一个参数过去。

????赋值运算符重载

  1. 参数类型:const T&,传递引用可以提高传参效率
  2. 返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值
  3. 检测是否自己给自己赋值
  4. 返回*this :要复合连续赋值的含义

在这里插入图片描述

上图中就是赋值运算符重载的写法。

赋值运算符只能重载成类的成员函数不能重载成全局函数,否则就要传同等数量的参数了。

在前面有写了默认构造函数和默认析构函数等等,这里赋值运算符重载,也是有相关默认赋值运算符重载,用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝,内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。对于一些没有涉及到资源管理的可以用系统默认的赋值运算符重载,而涉及到的就必须自己重新写,比如栈等等。

上一篇:Node.js 的常用命令详解


下一篇:java反序列化-CC1