对返回值为Class类型的成员函数的理解

对于返回值为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];
}

写代码终归是孰能生巧
代码写的越多对编程的理解就越深刻 掌握东西自燃比别人快很多
此篇仅仅是个人初学片面的理解 日后会加以改进 见谅


猜你喜欢

转载自blog.csdn.net/ljq199926/article/details/79673928