类的比较运算符重载

  C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

  函数名字为:关键字operator后面接需要重载的运算符符号。

  函数原型:返回值类型 operator操作符(参数列表)

#include
using namespace std;

class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;			
		_day = day;
	}

	 >运算符重载
	bool operator>(const Date& d)
	{
		if (this->_year > d._year ||
			this->_year == d._year&&this->_month > d._month ||
			this->_year == d._year&&this->_month == d._month&&this->_day > d._day)
		{
			return true;
		}
		return false;
	}

	 ==运算符重载
	bool operator==(const Date& d)
	{
		if (d._year == this->_year&&d._month == this->_month&&d._day == this->_day)
		{
			return true;
		}
		return false;
	}

	 <运算符重载
	bool operator < (const Date& d)
	{
		if (this->_year < d._year ||
			this->_year == d._year&&this->_month < d._month ||
			this->_year == d._year&&this->_month == d._month&&this->_day < d._day)
		{
			return true;
		}
		return false;
	}

	 !=运算符重载
	bool operator != (const Date& d)
	{
		return !(&d == this);
	}

private:

	int _year;
	int _month;
	int _day;

};

int main()
{
	Date d1(2020, 10, 9);

	Date d2(2020, 9, 20);

	if (d1 > d2)
	{
		cout << "d1 > d2" << endl;
	}

	if (d1 == d2)
	{
		cout << "d1 == d2" << endl;
	}

	if (d1 < d2)
	{
		cout << "d1 < d2" << endl;
	}

	if (d1 != d2)
	{
		cout << "d1 != d2" << endl;
	}
	return 0;
}

注意:
  ★ 不能通过连接其他符号来创建新的操作符:比如operator@

  ★ 重载操作符必须有一个类类型或者枚举类型的操作数

  ★ 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义

  ★ 作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的操作符有一个默认的形参this,限定为第一个形参

  ★ .* 、:: 、sizeof 、?: 、. 注意以上5个运算符不能重载。

你可能感兴趣的:(c++)