#include <iostream>
#include <cassert>
#include <vector>
using namespace std;
class KlasaBaza
{
public:
KlasaBaza();
virtual ~KlasaBaza();
void MetodaWspolna();
virtual void MetodaKlasy() = 0;
};
class Klasa1 : public KlasaBaza
{
public:
Klasa1();
~Klasa1();
void MetodaKlasy();
};
class Klasa2 : public KlasaBaza
{
public:
Klasa2();
~Klasa2();
void MetodaKlasy();
};
int main()
{
KlasaBaza *O1 = new Klasa1();
O1->MetodaWspolna();
O1->MetodaKlasy();
delete O1;
KlasaBaza *O2 = new Klasa2();
O2->MetodaWspolna();
O2->MetodaKlasy();
delete O2;
return 0;
}
KlasaBaza::KlasaBaza()
{
cout << "Konstruktor KlasaBaza" << endl;
}
KlasaBaza::~KlasaBaza()
{
cout << "Destruktor KlasaBaza" << endl;
}
void KlasaBaza::MetodaWspolna()
{
cout << "Metoda KlasaBaza" << endl;
}
Klasa1::Klasa1()
{
cout << "Konstruktor Klasa1" << endl;
}
Klasa1::~Klasa1()
{
cout << "Destruktor Klasa1" << endl;
}
void Klasa1::MetodaKlasy()
{
cout << "Metoda Klasa1" << endl;
}
Klasa2::Klasa2()
{
cout << "Konstruktor Klasa2" << endl;
}
Klasa2::~Klasa2()
{
cout << "Destruktor Klasa2" << endl;
}
void Klasa2::MetodaKlasy()
{
cout << "Metoda Klasa2" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBLbGFzYUJhemEKewpwdWJsaWM6CiAgICBLbGFzYUJhemEoKTsKICAgIHZpcnR1YWwgfktsYXNhQmF6YSgpOwogICAgdm9pZCBNZXRvZGFXc3BvbG5hKCk7CiAgICB2aXJ0dWFsIHZvaWQgTWV0b2RhS2xhc3koKSA9IDA7Cn07CgpjbGFzcyBLbGFzYTEgOiBwdWJsaWMgS2xhc2FCYXphCnsKcHVibGljOgogICAgS2xhc2ExKCk7CiAgICB+S2xhc2ExKCk7CiAgICB2b2lkIE1ldG9kYUtsYXN5KCk7Cn07CgpjbGFzcyBLbGFzYTIgOiBwdWJsaWMgS2xhc2FCYXphCnsKcHVibGljOgogICAgS2xhc2EyKCk7CiAgICB+S2xhc2EyKCk7CiAgICB2b2lkIE1ldG9kYUtsYXN5KCk7Cn07CgppbnQgbWFpbigpCnsKCUtsYXNhQmF6YSAqTzEgPSBuZXcgS2xhc2ExKCk7CgkgICAgTzEtPk1ldG9kYVdzcG9sbmEoKTsKCSAgICBPMS0+TWV0b2RhS2xhc3koKTsKCSAgICBkZWxldGUgTzE7CgkgICAgS2xhc2FCYXphICpPMiA9IG5ldyBLbGFzYTIoKTsKCSAgICBPMi0+TWV0b2RhV3Nwb2xuYSgpOwoJICAgIE8yLT5NZXRvZGFLbGFzeSgpOwoJICAgIGRlbGV0ZSBPMjsKCglyZXR1cm4gMDsKfQoKS2xhc2FCYXphOjpLbGFzYUJhemEoKQp7CiAgICBjb3V0IDw8ICJLb25zdHJ1a3RvciBLbGFzYUJhemEiIDw8IGVuZGw7Cn0KCktsYXNhQmF6YTo6fktsYXNhQmF6YSgpCnsKICAgIGNvdXQgPDwgIkRlc3RydWt0b3IgS2xhc2FCYXphIiA8PCBlbmRsOwp9Cgp2b2lkIEtsYXNhQmF6YTo6TWV0b2RhV3Nwb2xuYSgpCnsKICAgIGNvdXQgPDwgIk1ldG9kYSBLbGFzYUJhemEiIDw8IGVuZGw7Cn0KCktsYXNhMTo6S2xhc2ExKCkKewogICAgY291dCA8PCAiS29uc3RydWt0b3IgS2xhc2ExIiA8PCBlbmRsOwp9CgpLbGFzYTE6On5LbGFzYTEoKQp7CiAgICBjb3V0IDw8ICJEZXN0cnVrdG9yIEtsYXNhMSIgPDwgZW5kbDsKfQoKdm9pZCBLbGFzYTE6Ok1ldG9kYUtsYXN5KCkKewogICAgY291dCA8PCAiTWV0b2RhIEtsYXNhMSIgPDwgZW5kbDsKfQoKS2xhc2EyOjpLbGFzYTIoKQp7CiAgICBjb3V0IDw8ICJLb25zdHJ1a3RvciBLbGFzYTIiIDw8IGVuZGw7Cn0KCktsYXNhMjo6fktsYXNhMigpCnsKICAgIGNvdXQgPDwgIkRlc3RydWt0b3IgS2xhc2EyIiA8PCBlbmRsOwp9Cgp2b2lkIEtsYXNhMjo6TWV0b2RhS2xhc3koKQp7CiAgICBjb3V0IDw8ICJNZXRvZGEgS2xhc2EyIiA8PCBlbmRsOwp9