Добавление реализации года в C++ с использованием класса

Я пытаюсь сделать программу внутри класса и добавить к дате по одному в каждом. Так что, если дата была: 01.01.2014, я хочу, чтобы она была 02.02.2015.

Мне удалось вычислить часть для дня и месяца, однако по какой-то причине я получаю странное число за год.

когда я попытался отладить программу, я обнаружил, что она печатает следующее

1/1/2014
1/1/2014
1/0/2014 // I am not sure why did it change the day to 0 but I don't care about this as I'm getting the correct result at the end
2/2/4028 // I am more concern about the 4028 ! I don't know from where did this come from
2/2/4028

Вот что я сделал до сих пор:

      #include "stdafx.h"
      #include <iostream>
      #include <iomanip>
      #include <string>
      using namespace std;

       class Date
     {

public:
    int day, year, monthnum;
    Date(int d=1, int m2 =1, int y= 2014)
    {
        monthnum = m2;
        day = d;
        year =y;
        cout << *this; // this is just for testing purposes
    }


    Date operator+(const Date&) const;


    friend ostream& operator << (ostream& out, const Date& date)
    {   
        out << date.monthnum << "/" << date.day << "/" << date.year <<endl;
        return out;
    }


};


Date Date:: operator+(const Date& date) const
{
    return Date(day+date.day,monthnum+ date.monthnum ,date.year+year); // I think there is something with the "date.year + year" because when I remove this I get my initialization of the year which is 2014, however, I need it to be 2015 when I add one to it.
}




void testprogram()
{
Date date1(1), date2(1), date3(0);
date3 = date1 + date2;
cout << date3 << endl;

}


int main()
{
    testprogram();
return 0;
}

2 ответа

Решение

Подумайте внимательно о том, что Date представляет, и что добавление вещей в Dateс будет означать. Date это конкретный момент времени. Добавление их вместе было бы похоже на сложение широты и долготы Денвера и Кливленда и ожидание того, что координата будет означать что-то полезное!

В ваших параметрах по умолчанию указывается год 2014, поэтому при добавлении даты1 и даты2 вы получите date3.year = 2014 + 2014. Я бы предостерег вас от использования параметров по умолчанию, за исключением случаев, когда вызывающая сторона почти всегда хочет использовать значение по умолчанию. Это сбрасывает вас и с date3, потому что вы указываете этот день =0, monthnum=1, year=2014.

return Date(day+date.day,monthnum+ date.monthnum ,date.year+year);

Здесь вы добавляете каждый год, месяц и день от даты1 до даты2. Итак, 2014 + 2014 = 4028! если вы пытаетесь добавить "1" к каждой части, напишите функцию, которая возвращает monthnum + 1, день + 1 и год + 1.

Другие вопросы по тегам