Ajout de l’implémentation d’année en c ++ à l’aide d’une classe

J’essaye de faire un programme dans une classe et d’append à la date un dans chaque. Donc, si la date était: 01/01/2014 Je veux que ce soit 2/2/2015.

J’ai été capable de comprendre la partie pour le jour et le mois, cependant, pour une raison quelconque, je reçois un nombre étrange pour l’année.

quand j’ai essayé de déboguer le programme, j’ai découvert qu’il imprimait ce qui suit

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 

Voici ce que j’ai fait jusqu’à présent:

  #include "stdafx.h" #include  #include  #include  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; } 

Réfléchissez bien à ce que représente une Date et à ce que l’ajout de choses à Date s signifierait. Une Date est un moment particulier. Les append ensemble équivaudrait à additionner la latitude et la longitude de Denver et de Cleveland et à s’attendre à ce que les coordonnées aient une signification utile!

Vos parameters par défaut spécifient l’année 2014, donc lorsque vous ajoutez date1 et date2, vous obtenez date3.year = 2014 + 2014. Je vous prie d’éviter les parameters par défaut, sauf dans les cas où l’appelant voudra presque toujours utiliser la valeur par défaut. Cela vous jette aussi pour date3, parce que vous spécifiez ce jour = 0, monthnum = 1, année = 2014.

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

Ici, vous ajoutez chaque année, mois et jour de date1 à date2. Donc 2014 + 2014 = 4028! si vous essayez d’append “1” à chaque partie, écrivez une fonction pour renvoyer monthnum + 1, jour + 1 et année + 1.