Conditional operator overloading
//运算符重载: 重新定义运算符,赋予其他功能,以适应不同的数据类型
//成员函数实现运算符重载
//全局函数实现运算符重载
//比较运算符: > < >= <= == !=
#include <iostream>
using namespace std;
//封装类 Person
class Person
{
friend bool operator<(const Person &L, const Person &R); // 设置operator<函数为该类的友元,允许访问该类的所有成员
friend bool operator==(const Person &L, const Person &R); // 设置operator==函数为该类的友元,允许访问该类的所有成员
string name;
int age;
public:
//无参构造函数
Person()
{
}
//有参构造函数
Person(string name, int age) : name(name), age(age)
{
}
//成员函数实现大于运算符重载
bool operator>(const Person &p)
{
if(name >= p.name && age >= p.age)
{
return true;
}
else
{
return false;
}
}
//成员函数实现不等于运算符
bool operator!=(const Person &R)
{
if(name!=R.name || age != R.age)
{
return true;
}
else
{
return false;
}
}
};
//全局函数实现小于运算符重载
bool operator<(const Person &L, const Person &R)
{
if(L.name < R.name && L.age <R.age)
{
return 1;
}
else
{
return 0;
}
}
bool operator==(const Person &L, const Person &R)
{
if(L.name == R.name && L.age == R.age)
{
return true;
}
else
{
return false;
}
}
int main()
{
Person p1("ZS", 17); //实例化一个类对象
Person p2("ZA", 14); //实例化一个类对象
Person p3("yy", 16);
Person p4("zz", 16);
Person p5("zz", 16);
if(p1>p2) //成员函数运算符重载 本质为:p1.operator>(const Person &p2), 左操作值调用成员函数 operator, 参数为p2的引用
{
cout << "p1 > p2" << endl;
}
if(p3<p4) //全局函数运算符重载,本质为operator<(const Person &p1, const Person &p2) 调用operator<函数,参数为怕/p2的引用
{
cout << "p3 < p4" << endl;
}
if(p3 != p4) //成员函数运算符重载,本质为p3.operator!=(const Person &p4)
{
cout << "p3 != p4" << endl;
}
if(p4 == p5) //全局函数运算符重载:本质为: operate==(const Person &P4, const Person &p5);
{
cout << "p5 == p4" << endl;
}
return 0;
}
Copy assignment function, anonymous object, friend, constant member function/constant object, operator overloading