#include <iostream>
using namespace std;

const int DAYS = 0x08;

class Date
{
protected:	// vorher private!!!
	uint8_t day, month, year;

public:
	Date():day(1), month(1), year(00)  {} // Initialisierungsliste mit konstante Parameterwerten
	// Initialisierungsliste über parametrisierten Konstruktor
	Date(uint8_t _day, uint8_t _month, uint8_t _year):day(_day), month(_month), year(_year) {}

    uint8_t GetDay();		// Methode
};

uint8_t Date::GetDay()
{
    return day;
}

class DateString : public Date	// String siehe auch: http://s...content-available-to-author-only...e.net/Home.shtml
{
public:
    DateString():Date() {}
    // DateString():Date(2,3,11) {}  // Alternativ mit neuen Werten --> ausprobieren
    DateString(uint8_t _day, uint8_t _month, uint8_t _year): Date(_day, _month, _year) {}
    
    string GetDayStr() {	
	// string str = to_string(day);
	return to_string(day);
    }
};

int main()
{
	DateString date1;			// Instanziierung mit Standard Konstruktor und 
	DateString date2(18,4,15);  		// mit parametrisierten Konstruktor

	printf("Day 1: %d\n", date1.GetDay());	// Verwenden der Methode GetDay aus Klasse Date
	printf("Day 2: %d\n", date2.GetDay());
	string str = date2.GetDayStr();
	printf("DayString %s\n", str.c_str());	// in einen C-String konvertieren für printf oder cout verwenden 
  return 0;
}
