对于返回值为Class(非引用)的成员函数 返回的为该函数的*this 因为类比之前的函数类型 *this仅仅只是返回的一个一摸一样的“值”
这个“值”为函数体内复制的 而非之前的对象 相当于一个分身 这个分身可以支持链式表达 但由余他是一个分身 所以之后链式表达的成员函数操作将不会改变最初对象里的值 当链式表达由;号结束后 这个分身对象将会消失
这题要求我们shu'chu
#include<iostream>
using namespace std;
class CDate
{
public:
CDate();
CDate(int y,int m,int d);
void SetDate(int y,int m,int d);
int GetYear();
int GetMonth();
int GetDay();
void Show();
CDate IncOneDay();
private:
int year,month,day;
int IsLeapYear(int y);
int DaysOfMonth(int y,int m);
};
CDate::CDate():year(2015),month(5),day(7){cout<<"Default constructor is called!"<<endl;}
CDate::CDate(int y,int m,int d):year(y),month(m),day(d){cout<<"Constructor is called!"<<endl;}
void CDate::SetDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
cout<<"Date is reset!"<<endl;
}
int CDate::GetYear()
{
return year;
}
int CDate::GetMonth()
{
return month;
}
int CDate::GetDay()
{
return day;
}
void CDate::Show()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
CDate CDate::IncOneDay()
{
CDate a(*this);
a.day++;
if(a.day>DaysOfMonth(year,month))
{
a.day=1;
a.month++;
}
if(a.month>12)
{
a.month=1;
a.year++;
}
return a;
}
int CDate::IsLeapYear(int y)
{
if(y%4==0&&y%100!=0||y%400==0)
return 1;
return 0;
}
int CDate::DaysOfMonth(int y,int m)
{
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(CDate::IsLeapYear(y))
a[2]++;
return a[m];
}
写代码终归是孰能生巧
代码写的越多对编程的理解就越深刻 掌握东西自燃比别人快很多
此篇仅仅是个人初学片面的理解 日后会加以改进 见谅