作用:使两个自定义类进行对比操作
❌错误案例:
这里我们首先定义一个Person类
在这里插入代码片
class Person
{
public:
Person(string name,int age)
{
this -> m_Name = name;
this -> m_Age = age;
}
string m_Name;
int m_Age;
};
void test01()
{
Person p1("Tom",18);
Person p2("Jim",20);
if(p1 == p2) {
cout << "p1 与 p2 相等" << endl;
}
else
cout<<"p1 与 p2 不相等 "<<endl;
}
因为编译器不能够直接将两个类对象进行对比操作,所以在
test01()中 p1 == p2 是违法操作。我们需要在类内进行关系运算符重载,让编译器去认识它。
在这里插入代码片
//在类内实现重载 == 运算符
bool operator==(Person &p)
{
if(this->m_Name == p.m_Name && this->m_Age == p.m_Age)
{
return true;
}
else
{
return false;
}
}
在类内进行 == 运算符重载,就能解决编译器报错问题。
同样 == 与 != 非常相似
在这里插入代码片
//重载 != 运算符
bool operator!=(Person &p)
{
if(this->m_Name != p.m_Name && this->m_Age != p.m_Age)
{
return true;
}
else
{
return false;
}
}
如下:
✅正确案例
在这里插入代码片
#include<iostream>
#include<string>
#include<unistd.h>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this -> m_Name = name;
this -> m_Age = age;
}
//在类内实现重载 == 运算符
bool operator==(Person &p)
{
if(this->m_Name == p.m_Name && this->m_Age == p.m_Age)
{
return true;
}
else
{
return false;
}
}
string m_Name;
int m_Age;
};
void test01()
{
Person p1("Tom",20);
Person p2("Tom",20);
if(p1 == p2) {
cout << "p1 与 p2 相等" << endl;
}
else
cout<<"p1 与 p2 不相等"<<endl;
}
int main(){
test01();
pause();
return 0;
}
运行结果:
同样:!= 重载
在这里插入代码片
#include<iostream>
#include<string>
#include<unistd.h>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this -> m_Name = name;
this -> m_Age = age;
}
// //重载 != 运算符
bool operator!=(Person &p)
{
if(this->m_Name != p.m_Name || this->m_Age != p.m_Age)
{
return true;
}
else
{
return false;
}
}
string m_Name;
int m_Age;
};
void test01()
{
Person p1("Tom",2);
Person p2("Tom",20);
if(p1 != p2)
{
cout<<"p1 与 p2 不相等"<<endl;
}
else
cout<<"p1 与 p2 相等"<<endl;
}
int main(){
test01();
pause();
return 0;
}
结果:
以上就是本人的理解,希望大家有所收获。