//File Person.h

class Person {

public:
	Person(const char * firstName, const char * lastName, const char * email, int day, int month, int year)
		: name(firstName, lastName), email_address(email), birthday(day, month, year){
		//All initialization done in list
	}
	Person(const char * firstName, const char * lastName, const char * email, const Date & d)
		: name(firstName, lastName), email_address(email), birthday(d){
		//All initialization done in list
	}
	Person(const Person & p)
		: name(p.name), email_address(p.email_address), birthday(p.birthday){
			//All initializiation done in list
	}
	~Person(){
		//No code needed here
	}
	Person & operator=(const Person & p){
		name = p.name;
		email_address = p.email_address;
		const_cast <Date &> (birthday) = p.birthday;
		return *this;
	}
	const Name & getName() const {
		return name;
	}
	const Name & getEmailAddress() const {
		return email_address;
	}
	void setEmailAddress(const char * email){
		email_address = email;
	}
	const Date & getBirthDate()const {
		return birthday;
	}
	void printOn(ostream & o) const {
		o << name << "\n\t Email: " << email_address << "\n\t Birthday: " << birthday;
	}

private:
     Name name;
     Name email_address;
     const Date birthday;

};

ostream & operator<<(ostream & ostr, const Person & p) {
     p.printOn(ostr);
     return ostr;
} 