#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;
}