Purpose: Create a C++ class; use operators, overloading, member functions, friend functions, constructors and private data.
• Make the data members private. (This means that the non-member functions below will have to be friends of the Data).
• Create a member function called ‘set’ with the same arguments, and return type void; and create a constructor with the same arguments.
Note that the member function accesses the data members of the object that called it, and a constructor sets the data members of the Date object being created.
A member function is called like ‘d.set(12,31,1999)’. A constructor is not called like a member function. It is used to create an object, which did not yet exist, either in a variable declaration, “Date d(12,31,1999);’
• Create operator << to output a date to an ostream.
• Write operator++() and operator++(int) as member functions that do the same thing—change the value that is stored in the object of that called them, so that the object contains a date one day later.
In addition to doing this, they also return a value. The operator with no formal arguments is called as ‘++x’, and returns the value that is stored in the date after it is incremented. The one with a dummy int argument is called as ‘x++’, and returns the value that was stored in the date before it was incremented. Thus,
Date a(2,7,2001), b(1,1,2001), c, d;
c = a++; d = ++b;
cout << a << “,” << c << “,” << b << “,” << d;
will print “February 8, 2001, February 7, 2001, January 2, 2001, January 2, 2001”.
• Write operator==, so that ‘a==b’ returns true if two dates are the same and false otherwise. It should not be a member function. (use friend function).
Finally, write a main function that tests all of the functions you wrote. If a function has a return value, you must demonstrate that the return value is correct. If a function is supposed to change the value stored in a variable, you must test that it did so. Be careful to test both of these properties for both operator++’s.
//Output:
Default constructor: January 1, 2000
3 argument constructor: February 27, 2000
d2++ returns February 27, 2000 and changes d2 to February 28, 2000
++d2 returns February 29, 2000 and changes d2 to February 29, 2000
January 1, 2000, != February 29, 2000
January 1, 2000 == January 1, 2000.
This is what I have so far:
#include <iostream>
#include <iomanip>
using namespace std;
class date {
friend ostream &operator << (ostream&, const date &);
friend istream &operator >> (istream&, date &);
private:
date ();
void set ();
};
ostream &operator << (ostream &output, const date &num)
{
return output;
}
istream &operator >> (istream &input, date &num)
{
return input;
}
date::date()
{
// I have no idea what goes in the constructor
}
int main()
{
return 0;
}