I have been stuck with a problem in C++ for several hours now, and I can't figure out what's going on, even with the help of the debugger.
I am trying to create a Date
class which (no kidding) represents a date, with day, month and year. I also want to overload the main operator (++, --, +=, -=, +).
For a reason I cannot see, everything seems working fine, except the operator '+'.
Here is my header file:
#include <ostream>
class Date {
public:
Date(int year, int month, int day);
~Date();
Date(const Date& date);
Date &operator+(int days);
private:
int m_year;
int m_month;
int m_day;
friend std::ostream &operator<<(std::ostream &os, const Date &date);
};
Here is my C++ file:
#include "Date.h"
using namespace std;
Date::Date(int year, int month, int day)
: m_year(year),
m_month(month),
m_day(day)
{}
Date::~Date() {}
Date::Date(const Date &date)
: m_year(date.m_year),
m_month(date.m_month),
m_day(date.m_day)
{}
ostream &operator<<(ostream &os, const Date &date) {
os << date.m_day << ", " << date.m_month << " " << date.m_year;
return os; <---- debug point A
}
Date &Date::operator+(int days) {
Date newDate(*this);
newDate.m_day = newDate.m_day + days;
return newDate; <---- debug point B
}
And my main file:
#include "Date.h"
#include <ostream>
using namespace std;
int main(int argc, char *argv[])
{
Date date(2013, 12, 12);
cout << date << endl;
cout << date + 2 << endl;
return 0;
}
And the output is:
12, 12 2013
1359440472, 12 2013
Process finished with exit code 0
I don't understand where does this 1359440472 comes from!!
I have tried to put debug point (as shown above), and the output is the following:
Debug point A:
date = {const Date &}
m_year = {int} 2013
m_month = {int} 12
m_day = {int} 12
Debug point B:
this = {Date * | 0x7fff5c5ddac0} 0x00007fff5c5ddac0
m_year = {int} 2013
m_month = {int} 12
m_day = {int} 12
days = {int} 2
newDate = {Date}
m_year = {int} 2013
m_month = {int} 12
m_day = {int} 14
Debug point A:
date = {const Date &}
m_year = {int} 2013
m_month = {int} 12
m_day = {int} 1549654616
I cannot explain that!! There is no step between the two last debug checkpoints, and "14" has become "1549654616"...
It could be a problem with the type int
(as it seems to be not far from 2^24) or a problem with the operator +, but I don't see how to fix it.
Thanks you for your help, Ed