answersLogoWhite

0


Best Answer

The following is one possible method. If the input arguments would result in an invalid date (or no arguments are given), then the members are set to an arbitrary default date (in this case 1/1/1980).

An alternative method that ensures all dates are valid (non-default) would be to throw an exception from the set() member. If your code is producing invalid date arguments (causing the exception to be thrown) then you really need to fix the code that generates those dates. Note that the static methods, is_valid() and is_leap_year(), can be used to check date arguments without actually constructing a date object.

Another alternative would be to set a flag that denotes if the date object is valid or not. However, this is the least intuitive method as the onus is then placed upon the user to always check the flag before using the object.

#include<iostream>

#include<iomanip>

class cdate

{

unsigned m_day;

unsigned m_month;

unsigned m_year;

public:

cdate (unsigned day, unsigned month, unsigned year): m_day(1), m_month(1), m_year(1980) { set (day, month, year); }

cdate (const cdate& date): m_day(date.m_day), m_month(date.m_month), m_year(date.m_year) {}

cdate& operator= (const cdate& date) { m_day=date.m_day; m_month=date.m_month; m_year=date.m_year; }

bool set (unsigned day, unsigned month, unsigned year);

static bool is_valid (unsigned day, unsigned month, unsigned year);

static bool is_leap_year (unsigned year);

unsigned day() const { return m_day; }

unsigned month() const { return m_month; }

unsigned year() const { return m_year; }

};

bool cdate::is_valid (unsigned day, unsigned month, unsigned year)

{

// handle zeroes

if (!day !month !year)

return false;

// handle invalid month

if (month>12)

return false;

// handle 31 day months

if ((month==1 month==3 month==5 month==7 month==8 month==10 month==12) && day>31)

return false;

// handle 30 day months

if ((month==4 month==6 month==9 month==11) && day>30)

return false;

// handle leap years

if (month==2)

{

if (!is_leap_year (year) && day>28)

return false;

else if (day>29)

return false;

}

// data ok

return true;

}

bool cdate::is_leap_year(unsigned year)

{

// common year (not divisible by 4)

if (year%4)

return false;

// leap year (not divisible by 100)

else if (year%100)

return true;

// leap year (divisible by 400)

else if (year%400==0)

return true;

// common year

return false;

}

bool cdate::set (unsigned day, unsigned month, unsigned year)

{

if (is_valid (day, month, year))

{

m_day = day;

m_month = month;

m_year = year;

return true;

}

// alternatively, throw an exception here

return false;

}

std::ostream& operator<< (std::ostream& os, const cdate& date)

{

os

<< std::setw (2) << std::setfill('0') << date.day() << '/'

<< std::setw (2) << std::setfill('0') << date.month() << '/'

<< std::setw (4) << std::setfill('0') << date.year();

return os;

}

int main ()

{

// invalid date (was not a leap year)

std::cout << "Input:\t29/02/1900" << std::endl;

cdate d1(29,2,1900);

std::cout << "Output:\t" << d1 << std::endl;

// valid date (was a leap year)

std::cout << "Input:\t29/02/2000" << std::endl;

cdate d2(29,2,2000);

std::cout << "Output:\t" << d2 << std::endl;

}

User Avatar

Wiki User

10y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: How do you define a constructor function for a Date class that initializes the Date objects?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Continue Learning about Engineering

Can you declare and define the constructor within class?

Yes, you can declare and define the constructor within a class. A constructor is a special member function of a class that is automatically called when an object of the class is created. It is used to initialize the object's data members. The constructor can be declared and defined within the class definition or can be defined outside the class definition using the scope resolution operator (::).


When do you get a default constructor When the class has no other constructors When you define at least one constructor When you define a class None of the above?

hjuki


What is a constructor and its mandatory to use constructor in a class?

Constructor is a special block of code similar to the method that is used to initialize the state of objects. If you do not define a constructor in a class, Java compiler automatically put a default constructor in the class.


What does it mean in java when a constructor is undefined?

When a constructor is not define in java then the instance used in class is not optimised the value and therefore some times it generates some garbage value. By the way , When we not define a constructor then generally it not distrub the execution of the program.


What is the need of parameterized constructor?

Parametrized constructors are used to increase the flexibility of a class, allowing objects to be instantiated and initialised in more ways than is provided by the default and copy constructors alone. If you define any parametrized constructor, including a copy constructor, you will lose the default constructor generated by the compiler and must declare your own if you need one. The default constructor can also be parametrized, but each parameter must include a default value in the declaration, so that it can be called without any parameters.

Related questions

Can you declare and define the constructor within class?

Yes, you can declare and define the constructor within a class. A constructor is a special member function of a class that is automatically called when an object of the class is created. It is used to initialize the object's data members. The constructor can be declared and defined within the class definition or can be defined outside the class definition using the scope resolution operator (::).


When do you get a default constructor When the class has no other constructors When you define at least one constructor When you define a class None of the above?

hjuki


What is a constructor and its mandatory to use constructor in a class?

Constructor is a special block of code similar to the method that is used to initialize the state of objects. If you do not define a constructor in a class, Java compiler automatically put a default constructor in the class.


What does it mean in java when a constructor is undefined?

When a constructor is not define in java then the instance used in class is not optimised the value and therefore some times it generates some garbage value. By the way , When we not define a constructor then generally it not distrub the execution of the program.


Can you define the constructor as private?

Yes, you can. Making a constructor private ensures that no other class can instantiate that class you just created with a private constructor. It is usually used in Singleton Patterns.


What is an array of class objects.how the array of class of class objects is defined in c plus plus?

An array of class objects is just a set of class objects arranged linearly in memory. It is no different than an array of elementary objects. You define it the same way. class myClass { ... }; myClass arrayOfMyClass[100]; // creates 100 objects and fires the constructor 100 times


How does one define a Javascript class?

To define the class of a javascript code or string there are two to three or so main methods, one of these is to use it, and review the result, such as activating and using a function relative to to itself. Another is to use the objects Literals, the advantage to this is that Literals are a shorter way to define objects and arrays in JavaScript.


What is the need of parameterized constructor?

Parametrized constructors are used to increase the flexibility of a class, allowing objects to be instantiated and initialised in more ways than is provided by the default and copy constructors alone. If you define any parametrized constructor, including a copy constructor, you will lose the default constructor generated by the compiler and must declare your own if you need one. The default constructor can also be parametrized, but each parameter must include a default value in the declaration, so that it can be called without any parameters.


What is a constructoris it mandatory to use constructor in a class?

You always should define default constructor for your class. You must also define a copy constructor for your class if there are any pointers in the class. While it is not mandatory, failure to provide a default constructor can result in bad behavior, and failure to provide a copy constructor when you have pointers in the class will result in bad behavior. For example, without a default constructor, the compiler will not fully initialize the attributes of the class. It will initialize the virtual function table, and call base class constructors, but that is all - the attributes could be random garbage. For another example, without a copy constructor, the compiler will generate one that simply makes a bit wise copy of the attributes. If these attributes contain pointers, then you have two pointers to the same object, not necessarily a good thing, especially if one of them get "deleted".


How do you create objects in Javascript?

There are two simple ways to create a new Object in Javascript. 1. Create a direct instance of an object. In this method, we call the native Javascript Object constructor. myObject = new Object(); myObject.property1 = 'First prop value'; myObject.property2 = 'A different value'; myObject.color = 'blue'; You can get this exact same result with less code by using object literal notation. myObject = {property1: 'First prop value', property2: 'A different value', color: 'blue'}; Adding a method is also easy. If you have a predefined function, you simply pass the name. myObject.niftyMethod = ourPreDefMethod; You can also use anonymous functions here... myObject.anotherNiftyMethod = function() { alert 'Super cool!'; } This works fine, but you might find a need for an object constructor, so you can produce objects at will as any given point. In that case, you simply define a function to create an object. function myObject( property1, property2) { this.property1 = property1; this.property2 = property2; this.color = null; //Set a method for changing color this.changeColor = function(color) { this.color = color; } } You can also define a function an attach it, same as the other notation.


What is the method of constructor overloading in c plus plus?

Constructor overloading, just like any function's overloading, is where more than one configuration of parameters exists for the function. Based on the number and type of the parameters, different versions of the function can be resolved by the linker. This is typically used in the constructor as the default constructor (no parameters), the copy constructor (one reference parameter of the same type as the class), and the conversion constructor (any other combination of parameters).


Can you define a function inside a function?

No. Functions should be defined separately. So you would not define a function within a function. You can define one function, and while defining another function, you can call the first function from its code.