When
在程序中对自定义数据结构进行运算的时候,比如比较自定义数据结构的大小。
What
- 数值计算型
- operator+
- operator-
- 逻辑计算型
- operator==
- operator!=
- operator<
- operator>
How
示例说明:自定义一个数据结构 class MedicalRecordNumber,包含
- 私有变量:
- mMRN - 构造函数;
- MedicalRecordNumber() //default constructor
- MedicalRecordNumber(uint64_t mrn) //重载的初始化mMRN constructor - 重载的operator //这里是本文章的重点
- bool operator==(const MedicalRecordNumber &other)
- bool operator!=(const MedicalRecordNumber &other)
- friend bool operator==(const MedicalRecordNumber& rec,const uint64_t& num) //这里需要说明一下:第一,是第一个operator==重载,第二,必须使用friend,因为默认的二元操作符的左值是对象自己,ADL(Argument Dependent Lookup)会查找它。因为重载了两个参数,实际上是改变了默认规则,就需要声明为friend。
#include <iostream>
using namespace std;
class MedicalRecordNumber
{
public:
MedicalRecordNumber() = default;
explicit MedicalRecordNumber(uint64_t mrn) : mMRN{mrn} {}
bool operator==(const MedicalRecordNumber &other) const
{
return other.mMRN == mMRN;
};
// bool operator== 的重载
friend bool operator==(const MedicalRecordNumber &rec, const uint64_t &num)
{
return rec.mMRN == num;
}
bool operator!=(const MedicalRecordNumber &other) const
{
return !(other == *this);
}
private:
uint64_t mMRN;
};
int main(int argc, char const *argv[])
{
MedicalRecordNumber mrn0{};
MedicalRecordNumber mrn1{3};
// bool operator==(const MedicalRecordNumber &other)调用
const bool sameMRN = mrn0 == mrn1;
const bool notSameMRN = mrn0 != mrn1;
cout << sameMRN << "|" << notSameMRN << endl; // console: 0|1
// friend bool operator==(const MedicalRecordNumber& rec,const uint64_t& num)调用
const bool sameMRNNum = mrn1 == 3.0;
cout << sameMRNNum << endl; // cosole:1
return 0;
}