定义一个日期类CDate 包含三个私有成员

定义一个日期类CDate,包含三个私有成员:year(年),month(月),day(日);有一个构造函数可以为其三个成员赋初值,以及一个友元函数Dis,可以计算两个日期相差的天数。在main函数中定义两个日期对象,计算两个日期相差的天数并输出完成测试。

#include<iostream>
using namespace std;
class Date{
    int day,month,year;
    public:
    Date(int y,int m,int d):year(y),month(m),day(d){}
    friend int count_day(Date &da,int flag);
    friend int leap(int year);
    friend int subs(Date &d1,Date &d2);
};
int leap(int  year){
    //int year = da.year;
    if(year%4!=0)
        return 0;
    if(year%100!=0)
        return 1;
    if(year%400==0)
        return 1;
    return 0;
}
int count_day(Date &da,int flag){
    int year = da.year;
    int temp = leap( year),sum=0;
    if(flag==1){
        for (int i = 1; i < da.month;i++){
            if(i==2){
                if(temp)
                    sum += 29;
                else
                    sum += 28;
                continue;
            }
         switch(i){
             case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
                sum += 31;
                break;
            case 4 : case 6 : case 9 : case 11 :
                sum += 30;
                break;
         }

        }
        sum += da.day;
    }else{
      for (int i = 12; i >=da.month;i--){
            if(i==2){
                if(temp)
                    sum += 29;
                else
                    sum += 28;
                continue;
            }
         switch(i){
             case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
                sum += 31;
                break;
            case 4 : case 6 : case 9 : case 11 :
                sum += 30;
                break;
         }

        }
        sum -= da.day;
    }
    return sum;
}

int subs(Date &d1,Date &d2){
    int sum = 0;
    sum += count_day(d1, 0) + count_day(d2, 1);
    if((d1.year-d2.year)==0){
        int flag = leap(d1.year);
        if(flag)
            sum -= 366;
        else
            sum -= 365;
        return sum;
    }
    if((d2.year-d1.year)>=2){
        for (int i = d1.year + 1; i <=d2.year - 1;i++){
            if(leap(i))
                sum += 366;
            else
                sum += 365;
        }
    }
    return sum;
}
int main() {
    int d11, d22, m1, m2, y1, y2;
    cin >> y1 >> m1 >> d11 >> y2 >> m2 >> d22;
    if((y2-y1)<0||(m2-m1)<0||(d22-d11)<0){
        cout << "time error!" << endl;
    }else{
        Date d1(y1, m1, d11),d2(y2,m2,d22);
        cout << subs(d1, d2)<<endl;
    }
    //char kkk = getchar();
}   

https://www.cnblogs.com/pluie/p/12952812.html