I am using the 3 files of code from the C++ book Chapter 11 and 11.8 Case Study:A Date Class with both cpp files and header file my questoion is how do i (add overloaded operator for "--" (pre and post), "-=", and ">>".
For ">>", user expected to type in the format of "mm/dd/yyyy".) Here is the code:

Recommended Answers

All 6 Replies

h file

#ifndef DATE_H

#define DATE_H




#include <iostream>

using namespace std;



{
class Date



   friend ostream &operator<<( ostream &, const Date & );

  // friend Rational operator--(Rational &);

public:

   Date( int m = 1, int d = 1, int y = 1900 ); // default constructor

   void setDate( int, int, int ); // set month, day, year

   Date &operator++(); // prefix increment operator

   Date operator++( int ); // postfix increment operator

   const Date &operator+=( int ); // add days, modify object

   static bool leapYear( int ); // is date in a leap year?

   bool endOfMonth( int ) const; // is date at the end of month?

private:

    //int numerator;

    //int   denominator;

   int month;

   int day;

   int year;




   static const int days[]; // array of days per month

   void helpIncrement(); // utility function for incrementing date

}; // end class Date

#endif

date.cpp


#include <iostream>

#include <string>

#include "Date.h"

using namespace std;




// initialize static member; one classwide copy

const int Date::days[] = 

   { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };




// Date constructor

Date::Date( int month, int day, int year ) 

{ 

   setDate( month, day, year ); 

} // end Date constructor




// set month, day and year

void Date::setDate( int mm, int dd, int yy )

{

   if ( mm >= 1 && mm <= 12 )

      month = mm;

   else

      throw invalid_argument( "Month must be 1-12" );




   if ( yy >= 1900 && yy <= 2100 )

      year = yy;

   else

      throw invalid_argument( "Year must be >= 1900 and <= 2100" );




   // test for a leap year

   if ( ( month == 2 && leapYear( year ) && dd >= 1 && dd <= 29 ) ||

        ( dd >= 1 && dd <= days[ month ] ) )

      day = dd;

   else  

      throw invalid_argument( 

         "Day is out of range for current month and year" );

} // end function setDate




// overloaded prefix increment operator 

Date &Date::operator++()

{

   helpIncrement(); // increment date

   return *this; // reference return to create an lvalue

} // end function operator++




// overloaded postfix increment operator; note that the  

// dummy integer parameter does not have a parameter name

Date Date::operator++( int )

{

   Date temp = *this; // hold current state of object

   helpIncrement(); 




   // return unincremented, saved, temporary object

   return temp; // value return; not a reference return

} // end function operator++




// add specified number of days to date

const Date &Date::operator+=( int additionalDays )

{

   for ( int i = 0; i < additionalDays; ++i )

      helpIncrement();




   return *this; // enables cascading

} // end function operator+=




// if the year is a leap year, return true; otherwise, return false

bool Date::leapYear( int testYear )

{

   if ( testYear % 400 == 0 || 

      ( testYear % 100 != 0 && testYear % 4 == 0 ) )

      return true; // a leap year

   else

      return false; // not a leap year

} // end function leapYear




// determine whether the day is the last day of the month

bool Date::endOfMonth( int testDay ) const

{

   if ( month == 2 && leapYear( year ) )

      return testDay == 29; // last day of Feb. in leap year

   else

      return testDay == days[ month ];

} // end function endOfMonth




// function to help increment the date

void Date::helpIncrement()

{

   // day is not end of month

   if ( !endOfMonth( day ) )

      ++day; // increment day

   else 

      if ( month < 12 ) // day is end of month and month < 12

      {

         ++month; // increment month

         day = 1; // first day of new month

      } // end if

      else // last day of year

      {

         ++year; // increment year

         month = 1; // first month of new year

         day = 1; // first day of new month

      } // end else

} // end function helpIncrement




// overloaded output operator

ostream &operator<<( ostream &output, const Date &d )

{

   static string monthName[ 13 ] = { "", "January", "February",

      "March", "April", "May", "June", "July", "August",

      "September", "October", "November", "December" };

   output << monthName[ d.month ] << ' ' << d.day << ", " << d.year;

   return output; // enables cascading

} // end function operator<<

& the main cpp project file:
#include <iostream>

#include "Date.h" // Date class definition

using namespace std;




int main()

{

   Date d1( 12, 27, 2010 ); // December 27, 2010   

   Date d2; // defaults to January 1, 1900




   cout << "d1 is " << d1 << "nd2 is " << d2;

   cout << "nnd1 += 7 is " << ( d1 += 7 );




   d2.setDate( 2, 28, 2008 );

   cout << "nn  d2 is " << d2;

   cout << "n++d2 is " << ++d2 << " (leap year allows 29th)";




   Date d3( 7, 13, 2010 );




   cout << "nnTesting the prefix increment operator:n"

      << "  d3 is " << d3 << endl;

   cout << "++d3 is " << ++d3 << endl;

   cout << "  d3 is " << d3;




   cout << "nnTesting the postfix increment operator:n"

      << "  d3 is " << d3 << endl;

   cout << "d3++ is " << d3++ << endl;

   cout << "  d3 is " << d3 << endl;

} // end main

Those are the 3 files that I am working on how do i add ther overloaded operator for "--" (pre and post), "-=", and ">>"?

what is "--" ? do you mean "+=" since you also specified "-="?

That's something the professor had said to add im not sure cause i don't see anything with "--"

There is no such operator as "--". You probably misundertood your instructor, he/she probably meant "==", which is the text to see if both sides of the operator are identical (called the equal operator).

The code you posted already contains examples of operator overloading, just follow those examples to create the new operators.

The operator -- is just the decrement operator, i.e., the opposite of ++.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.