一、思维导图
二、作业:实现关系运算符的重载
关系运算符重载 概念:
- 种类:>、>=、< 、<= 、 == 、!=
- 表达式:L#R (L表示左操作数,R表示有操作数,#表示运算符)
- 左操作数:既可以是左值也可以是右值
- 右操作数:既可以是左值也可以是右值
- 结果:bool类型的数据,右值
- 定义格式:
- 成员函数版:const bool operator#(const 类名 &R)const
- 全局函数版:const bool &operator#(const 类名 &L, const 类名 &R)
关系运算符种类:>、>=、< 、<= 、 == 、!=
关系运算符重载的实现方法相同
2.1 >
① 成员函数重载
#include <iostream>
using namespace std;
class Person
{
private:
int a;
int b;
public:
//无参构造函数
Person() {}
//有参构造函数
Person(int a,int b):a(a),b(b)
{}
//成员函数实现>号运算符重载
bool operator>(const Person &R) const
{
if(a>R.a && b>R.b)
{
return true;
}
else
{
return false;
}
}
};
int main()
{
Person s1(20,20);
Person s2(2,1);
if(s1.operator>(s2))
{
cout << "s1>s2" << endl;
}
return 0;
}
② 全局函数重载
#include <iostream>
using namespace std;
class Person
{
//将全局函数设置为友元
friend bool operator>(const Person &R,const Person &L);
private:
int a;
int b;
public:
//无参构造函数
Person() {}
//有参构造函数
Person(int a,int b):a(a),b(b)
{}
};
bool operator>(const Person &R,const Person &L)
{
//成员函数实现>号运算符重载
if(R.a>L.a && R.b>L.b)
{
return true;
}
else
{
return false;
}
}
int main()
{
Person s1(20,20);
Person s2(2,1);
if(operator>(s1,s2))
{
cout << "s1>s2" << endl;
}
return 0;
}
2.2 >=
① 成员函数重载
类内函数:
//成员函数实现>=号运算符重载
bool operator>=(const Person &R) const
{
if(a>=R.a && b>=R.b)
{
return true;
}
else
{
return false;
}
}
main函数内的调用函数:
if(s1.operator>=(s2))
{
cout << "s1>=s2" << endl;
}
② 全局函数重载
#include <iostream>
using namespace std;
class Person
{
//将全局函数设置为友元
friend bool operator>=(const Person &R,const Person &L);
private:
int a;
int b;
public:
//无参构造函数
Person() {}
//有参构造函数
Person(int a,int b):a(a),b(b)
{}
};
bool operator>=(const Person &R,const Person &L)
{
//成员函数实现>=号运算符重载
if(R.a>=L.a && R.b>=L.b)
{
return true;
}
else
{
return false;
}
}
int main()
{
Person s1(20,20);
Person s2(2,1);
if(operator>=(s1,s2))
{
cout << "s1>=s2" << endl;
}
return 0;
}