Objectives: This assignment will demonstrate your understanding of the following
ID: 667419 • Letter: O
Question
Objectives:
This assignment will demonstrate your understanding of the following:
C++ classes;
Implementing a class in C++;
Operator overloading with chaining;
Preprocessor directives #ifndef, #define, and #endif;
this – the pointer to the current object.
In this assignment you will implement the Date class and test its functionality.
Consider the following class declaration for the class date:
class Date
{
public:
Date(); //default constructor; sets m=01, d=01, y =0001
Date(unsigned m, unsigned d, unsigned y); //explicit-value constructor to set date equal to today's
//date. Use 2-digits for month (m) and day (d), and 4-digits for year (y); this function should //print a message if a leap year.
void display();//output Date object to the screen
int getMonth();//accessor to output the month
int getDay();//accessor to output the day
int getYear();//accessor to output the year
void setMonth(unsigned m);//mutator to change the month
void setDay(unsigned d);//mutator to change the day
void setYear(unsigned y);//mutation to change the year
friend ostream & operator<<(ostream & out, const Date & dateObj);//overloaded operator<< as a friend function with chaining
//you make add other functions if necessary
private:
int myMonth, myDay, myYear; //month, day, and year of a Date obj respectively
};
You will implement all the constructors and member functions in the class Date. Please see the comments that follow each function prototype in the Date class declaration above; these comments describe the functionality that the function should provide to the class.
Please store the class declaration in the file “date.h” and the class implementation in the file “date.cpp”, and the driver to test the functionality of your class in the file “date_driver.cpp”.
Below I have provided a skeleton with stubs and a driver to help you get started. Remember to separate the skeleton into the appropriate files, and to include the appropriate libraries.
Please zip the files date.h, date.cpp and date_driver.cpp in a zip file called “assgn2_pgm_date” and submit electrically through blackboard before the due date and time.
Notes:
ALL PROGRAMS SHOULD BE COMPILED USING MS VISUAL STUDIO C++!
Information on Month: 1 = January, 2 = February, 3= March, …, 12 = December
Test the functionality of your class in “date_driver.cpp” in the following order and include messages for each test:
Test default constructor
Test display
Test getMonth
Test getDay
Test getYear
Test setMonth
Test setDay
Test setYear
See sample output below.
See skeleton below.
S A M P L E O U T P U T FOR Assignment#2
Default constructor has been called
01/01/0001
Explicit-value constructor has been called
12/31/1957
Explicit-value constructor has been called
Month = 15 is incorrect
Explicit-value constructor has been called
2/29/1956
This is a leap year
Explicit-value constructor has been called
Day = 30 is incorrect
Explicit-value constructor has been called
Year = 0000 is incorrect
Explicit-value constructor has been called
Month = 80 is incorrect
Day = 40 is incorrect
Year = 0000 is incorrect
12/31/1957
12
31
1957
myDate: 11/12/2015 test2Date: 02/29/1956 yourDate: 12/31/1957
Skeleton FOR Assignment#2
#include <iostream>
#include <string>
//#include "date.h"
using namespace std;
//*********************************************************************************************
//*********************************************************************************************
// D A T E . h
//This declaration should go in date.h
#ifndef DATE_H
#define DATE_H
class Date
{
public:
Date(); //default constructor; sets m=01, d=01, y =0001
Date(unsigned m, unsigned d, unsigned y); //explicit-value constructor to set date equal to today's
//date. Use 2-digits for month (m) and day (d), and 4-digits for year (y); this function should //print a message if a leap year.
void display();//output Date object to the screen
int getMonth();//accessor to output the month
int getDay();//accessor to output the day
int getYear();//accessor to output the year
void setMonth(unsigned m);//mutator to change the month
void setDay(unsigned d);//mutator to change the day
void setYear(unsigned y);//mutation to change the year
friend ostream & operator<<(ostream & out, const Date & dateObj);//overloaded operator<< as a friend function with chaining
//you make add other functions if necessary
private:
int myMonth, myDay, myYear; //month, day, and year of a Date obj respectively
};
#endif
//*********************************************************************************************
//*********************************************************************************************
// D A T E . C P P
//This stub (for now) should be implemented in date.cpp
//*************************************************************************************
//Name: Date
//Precondition: The state of the object (private data) has not been initialized
//Postcondition: The state has been initialized to today's date
//Description: This is the default constructor which will be called automatically when
//an object is declared. It will initialize the state of the class
//
//*************************************************************************************
Date::Date()
{
//the code for the default constructor goes here
}
//*************************************************************************************
//Name: Date
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
Date::Date(unsigned m, unsigned d, unsigned y)
{
}
//*************************************************************************************
//Name: Display
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
void Date::display()
{
}
//*************************************************************************************
//Name: getMonth
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
int Date::getMonth()
{
return 1;
}
//*************************************************************************************
//Name: getDay
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
int Date::getDay()
{
return 1;
}
//*************************************************************************************
//Name: getYear
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
int Date::getYear()
{
return 1;
}
//*************************************************************************************
//Name: setMonth
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
void Date::setMonth(unsigned m)
{
}
//*************************************************************************************
//Name: setDay
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
void Date::setDay(unsigned d)
{
}
//*************************************************************************************
//Name: getYear
//Precondition:
//Postcondition:
//Description:
//
//
//*************************************************************************************
void Date::setYear(unsigned y)
{
}
ostream & operator<<(ostream & out, const Date & dateObj)
{
return out;
}
//*********************************************************************************************
//*********************************************************************************************
// D A T E D R I V E R . C P P
//EXAMPLE OF PROGRAM HEADER
/********************************************************************************************
Name: Z#:
Course: Date Structures and Algorithm Analysis (COP3530)
Professor: Dr. Lofton Bullard
Due Date: Due Time:
Total Points: 100
Assignment 3: Date program
Description:
*********************************************************************************************/
int main()
{
//Date myDate;
//Date yourDate(12,31, 1957);
//Date test1Date(15, 1, 1962); //should generate error message that bad month
//Date test2Date(2, 29, 1956); //ok, should say leep year
//Date test3Date(2, 30, 1956); //should generate error message that bad day
//Date test4Date(12,31,0000); //should generate error message that bad year
//Date test5Date(80,40,0000); //should generate error message that bad month, day and year
//yourDate.display();
//cout<<yourDate.getMonth()<<endl;
//cout<<yourDate.getDay()<<endl;
//cout<<yourDate.getYear()<<endl;
//myDate.setMonth(11);
//myDate.setDay(12);
//myDate.setYear(2015);
//cout<<"myDate: "<<myDate<<" test2Date: "<<test2Date<<" yourDate: "<<yourDate<<endl;
return 0;
}
Explanation / Answer
date.h
------
#ifndef DATE_H
#define DATE_H
class Date
{
public:
Date(); //default constructor; sets m=01, d=01, y =0001
Date(unsigned m, unsigned d, unsigned y); //explicit-value constructor to set date equal to today's
//date. Use 2-digits for month (m) and day (d), and 4-digits for year (y); this function should //print a message if a leap year.
void display();//output Date object to the screen
int getMonth();//accessor to output the month
int getDay();//accessor to output the day
int getYear();//accessor to output the year
void setMonth(unsigned m);//mutator to change the month
void setDay(unsigned d);//mutator to change the day
void setYear(unsigned y);//mutation to change the year
friend ostream & operator<<(ostream & out, const Date & dateObj);//overloaded operator<< as a friend function with chaining
//you make add other functions if necessary
private:
int myMonth, myDay, myYear; //month, day, and year of a Date obj respectively
};
------------------------------------------------------------------------------------------------
Date::Date() //default constructor
{
myMonth = 01;
myDay = 01;
myYear = 0001;
}
Date::Date(int m, int d, int y) //parametrised constructor
{ //checking for valid
int temp = 0;
if(m<1 || m>12 ){
cout<<"Bad Month";
temp = 1;
}
else if(d<1 && d>31){
cout<<"Bad days";
temp = 1;
}
else if(year<1){
cout<<"Bad year";
temp = 1;
}
if(temp == 0){ //initialising variables
myMonth = m;
myDay = d;
myYear = y;
}
}
void Date::display()//display method
{
cout<<"Date: "<<myMonth<<" / "<<myDay<<" / "<<myYear;
}
//getter setter methods
int Date::getMonth()
{
return myMonth;
}
int Date::getDay()
{
return myDay;
}
int Date::getYear()
{
return myYear;
}
void Date::setMonth(int m)
{
myMonth = m;
}
void Date::setDay(iny d)
{
myDay = d;
}
void Date::setYear(int y)
{
myYear = y;
}
ostream & operator<<(ostream & out, const Date & dateObj)
{
return "Date: "<<myMonth + " / "+myDay + " / "+myYear;
}
--------------------------------------------------------------------------------------------------------------------
int main()
{
//cretung objects
Date myDate;
Date yourDate(12,31, 1957);
Date test1Date(15, 1, 1962); //should generate error message that bad month
Date test2Date(2, 29, 1956); //ok, should say leep year
Date test3Date(2, 30, 1956); //should generate error message that bad day
Date test4Date(12,31,0000); //should generate error message that bad year
Date test5Date(80,40,0000); //should generate error message that bad month, day and year
yourDate.display();
cout<<yourDate.getMonth()<<endl;
cout<<yourDate.getDay()<<endl;
cout<<yourDate.getYear()<<endl;
myDate.setMonth(11);
myDate.setDay(12);
myDate.setYear(2015);
//printing date object data
cout<<"myDate: "<<myDate<<" test2Date: "<<test2Date<<" yourDate: "<<yourDate<<endl;
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.