看风格的网站,查找做影评的工作网站,网站开发企业培训报名,wordpress添加icp赋值运算符重载
运算符重载 C 为了 增强代码的可读性 引入了运算符重载 #xff0c; 运算符重载是具有特殊函数名的函数 #xff0c;也具有其返回值类型#xff0c;函数名字以及参数列表#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为#xff1a;关键…赋值运算符重载
运算符重载 C 为了 增强代码的可读性 引入了运算符重载 运算符重载是具有特殊函数名的函数 也具有其返回值类型函数名字以及参数列表其返回值类型与参数列表与普通的函数类似。 函数名字为关键字 operator 后面接需要重载的运算符符号 。 函数原型 返回值类型 operator 操作符 ( 参数列表 ) 注意 1.不能通过连接其他符号来创建新的操作符比如 operator 2.重载操作符必须有一个类类型参数就是至少有一个参数是 自定义类型。 3.用于内置类型的运算符其含义不能改变例如内置的整型 不能改变其含义 4.作为类成员函数重载时其 形参看起来比操作数数目少1 因为成员函数的第一个参数为 隐藏的this 5. .* :: sizeof ?: . 注意以上 5 个运算符不能重载。 6.不能改变操作符的操作数个数一个操作符有几个操作数在重载的时候就要有几个参数 // 全局的operator
class Date
{
public:Date(int year 1900, int month 1, int day 1){_year year;_month month;_day day;}
//private:int _year;int _month;int _day;
};bool operator(const Date d1, const Date d2)
{return d1._year d2._year d1._month d2._month d1._day d2._day;
}
void Test ()
{Date d1(2018, 9, 26);Date d2(2018, 9, 27);cout(d1 d2)endl;
} class Date
{
public:Date(int year 1900, int month 1, int day 1)
{_year year;_month month;_day day;}bool operator(Date* this, const Date d2)这里需要注意的是左操作数是this指向调用函数的对象bool operator(const Date d2){return _year d2._year; _month d2._month _day d2._day;}
private:int _year;int _month;int _day;
}; 比较年月日时间大小 DATE 日期类运算符重载 #includeiostream
#includeassert.h
using namespace std;class Date
{
public:Date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}void Print(){cout _year / _month / _day endl;}// d1 d2 左操作数就是第一个参数右操作数就是第二个参数参数顺序不能换// 相当于下面的比较// d1.operator(d2) d1就是this d2就是d不能换顺序bool operator(const Date d){if (_year d._year){return true;}else if (_year d._year _month d._month){return true;}else if (_year d._year _month d._month _day d._day){return true;}else{return false;}}bool operator(const Date d){return _year d._year _month d._month _day d._day;}// d1 d2bool operator(const Date d){return *this d || *this d;}bool operator(const Date d){return !(*this d);}bool operator(const Date d){return !(*this d);}bool operator!(const Date d){return !(*this d);}int GetMonthDay(int year, int month){int monthArray[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (month 2 ((year % 4 0 year % 100 ! 0) || (year % 400 0))){return 29;}return monthArray[month];}Date operator(int day){_day day;while (_day GetMonthDay(_year, _month)){// 月进位_day - GetMonthDay(_year, _month);_month;// 月满了if (_month 13){_year;_month 1;}}return *this;}Date operator(int day){Date tmp(*this);tmp day;return tmp;//tmp._day day;//while (tmp._day GetMonthDay(tmp._year, tmp._month))//{// // 月进位// tmp._day - GetMonthDay(tmp._year, tmp._month);// _month;// // 月满了// if (tmp._month 13)// {// tmp._year;// tmp._month 1;// }//}//return tmp;}private:// 内置类型int _year;int _month;int _day;
};int main()
{Date d1(2023, 7, 21);Date d2(2022, 8, 21);//这里只有两个操作数所以只能写两个参数cout (d1 d2) endl; // cout (d1.operator(d2)) endl;cout (d1 d2) endl;/*Date ret d1 50;ret.Print();d1.Print()*/Date ret d1 50;ret.Print();d1.Print();return 0;
}