#include <iostream>
#include <string>
using namespace std;
const int DAYS = 0x08;
class Date
{
private:
uint8_t day, month, year;
public:
Date():day(1), month(1), year(00) {} // Initialisierungsliste mit konstante Parameterwerten
// Initialisierungsliste ueber parametrisierten Konstruktor
Date(uint8_t _day, uint8_t _month, uint8_t _year):day(_day), month(_month), year(_year) {}
uint8_t GetDay(); // Methode
virtual string GetDay(string where);
};
string Date::GetDay(string where)
{
//day = "Datestr " + toString(value);
string day = where + " In Date Day: " + to_string(GetDay());
return day;
}
uint8_t Date::GetDay()
{
return day;
}
class DateString : public Date
{
public:
DateString():Date() {}
DateString(uint8_t _day, uint8_t _month, uint8_t _year): Date(_day, _month, _year) {}
int GetDay() { return 10; }
int GetDay(int xy) { return 99; }
virtual string GetDay(string where);
};
string DateString::GetDay(string where)
{
//day = "Datestr " + toString(value);
string day = where + " In DateString Day: " + to_string(GetDay());
return day;
}
int main()
{
Date *pBoth;
DateString ds;
Date d;
pBoth = &d; // Mit new wird Speicher wird auf dem Heap reserviert
// löschen Sie virtual vor der Deklaration. Wann und was ändert sich am Ergebnis?
pBoth = &d;
cout << pBoth->GetDay("Where am I?") << endl; // Virtuelle Methode GetDay return 1
pBoth = &ds;
cout << pBoth->GetDay("Where am I?") << endl; // Virtuelle Methode GetDay return 10;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IERBWVMgPSAweDA4OwoKY2xhc3MgRGF0ZQp7CnByaXZhdGU6Cgl1aW50OF90IGRheSwgbW9udGgsIHllYXI7CgpwdWJsaWM6CglEYXRlKCk6ZGF5KDEpLCBtb250aCgxKSwgeWVhcigwMCkgIHt9IC8vIEluaXRpYWxpc2llcnVuZ3NsaXN0ZSBtaXQga29uc3RhbnRlIFBhcmFtZXRlcndlcnRlbgoJLy8gSW5pdGlhbGlzaWVydW5nc2xpc3RlIHVlYmVyIHBhcmFtZXRyaXNpZXJ0ZW4gS29uc3RydWt0b3IKCURhdGUodWludDhfdCBfZGF5LCB1aW50OF90IF9tb250aCwgdWludDhfdCBfeWVhcik6ZGF5KF9kYXkpLCBtb250aChfbW9udGgpLCB5ZWFyKF95ZWFyKSB7fQoKICAgIHVpbnQ4X3QgR2V0RGF5KCk7CQkvLyBNZXRob2RlCiAgICB2aXJ0dWFsIHN0cmluZyBHZXREYXkoc3RyaW5nIHdoZXJlKTsgCn07CgpzdHJpbmcgRGF0ZTo6R2V0RGF5KHN0cmluZyB3aGVyZSkKewogICAgLy9kYXkgPSAiRGF0ZXN0ciAiICsgdG9TdHJpbmcodmFsdWUpOwogICAgc3RyaW5nIGRheSA9IHdoZXJlICsgIiBJbiBEYXRlIERheTogIiArIHRvX3N0cmluZyhHZXREYXkoKSk7CiAgICByZXR1cm4gZGF5Owp9Cgp1aW50OF90IERhdGU6OkdldERheSgpCnsKICAgIHJldHVybiBkYXk7Cn0KCmNsYXNzIERhdGVTdHJpbmcgOiBwdWJsaWMgRGF0ZQp7CnB1YmxpYzoKICAgIERhdGVTdHJpbmcoKTpEYXRlKCkge30KICAgIERhdGVTdHJpbmcodWludDhfdCBfZGF5LCB1aW50OF90IF9tb250aCwgdWludDhfdCBfeWVhcik6IERhdGUoX2RheSwgX21vbnRoLCBfeWVhcikge30KCglpbnQgR2V0RGF5KCkgeyByZXR1cm4gMTA7IH0KCWludCBHZXREYXkoaW50IHh5KSB7IHJldHVybiA5OTsgfSAgCgl2aXJ0dWFsIHN0cmluZyBHZXREYXkoc3RyaW5nIHdoZXJlKTsKfTsKCnN0cmluZyBEYXRlU3RyaW5nOjpHZXREYXkoc3RyaW5nIHdoZXJlKQp7CiAgICAvL2RheSA9ICJEYXRlc3RyICIgKyB0b1N0cmluZyh2YWx1ZSk7CiAgICBzdHJpbmcgZGF5ID0gd2hlcmUgKyAiIEluIERhdGVTdHJpbmcgRGF5OiAiICsgdG9fc3RyaW5nKEdldERheSgpKTsKICAgIHJldHVybiBkYXk7Cn0KCmludCBtYWluKCkKewogICAgRGF0ZSAqcEJvdGg7CiAgICBEYXRlU3RyaW5nIGRzOwogICAgRGF0ZSBkOwogICAgcEJvdGggPSAmZDsgICAgIC8vIE1pdCBuZXcgd2lyZCBTcGVpY2hlciB3aXJkIGF1ZiBkZW0gSGVhcCByZXNlcnZpZXJ0CgovLyBsw7ZzY2hlbiBTaWUgdmlydHVhbCB2b3IgZGVyIERla2xhcmF0aW9uLiBXYW5uIHVuZCB3YXMgw6RuZGVydCBzaWNoIGFtIEVyZ2VibmlzPwoKICAgIHBCb3RoID0gJmQ7CiAgICBjb3V0IDw8IHBCb3RoLT5HZXREYXkoIldoZXJlIGFtIEk/IikgPDwgZW5kbDsgIC8vIFZpcnR1ZWxsZSBNZXRob2RlIEdldERheSByZXR1cm4gMQogICAgcEJvdGggPSAmZHM7CiAgICBjb3V0IDw8IHBCb3RoLT5HZXREYXkoIldoZXJlIGFtIEk/IikgPDwgZW5kbDsgIC8vIFZpcnR1ZWxsZSBNZXRob2RlIEdldERheSAgcmV0dXJuIDEwOwp9Cg==