#include <iostream>

using namespace std;

int lobj = 0;    // licznik obiektów

class A {
    protected:
        int nr;  // numer obiektu
    public:
        A();
        ~A();
};

class B: public A {
    public:
        B();
        B(const char *c);
        B(int i);
        ~B();
};

class C: public B {
    public:
        C();
        C(const char *c);
        C(int i);
        ~C();
};

A::A()
{
    nr = ++lobj;
    cout << "A::A(), obiekt nr " << nr << endl;
}

A::~A()
{
    cout << "A::~A(), obiekt nr " << nr << endl;
}

B::B()
{
    cout << "B::B(), obiekt nr " << nr << endl;
}

B::B(const char *c)
{
    cout << "B::B(" << c << "), obiekt nr " << nr << endl;
}

B::B(int i)
{
    cout << "B::B(" << i << "), obiekt nr " << nr << endl;
}

B::~B()
{
    cout << "B::~B(), obiekt nr " << nr << endl;
}

C::C()
{
    cout << "C::C(), obiekt nr " << nr << endl;
}

C::C(const char *c):
    B(c)
{
    cout << "C::C(" << c << "), obiekt nr " << nr << endl;
}

C::C(int i)
{
    cout << "C::C(" << i << "), obiekt nr " << nr << endl;
}

C::~C()
{
    cout << "C::~C(), obiekt nr " << nr << endl;
}




int main()
{
    A a;                // obiekt nr 1
    B b;                // obiekt nr 2
    C c;                // obiekt nr 3
    C c2("xxx");        // obiekt nr 4
    C *c3 = new C(10);  // obiekt nr 5
    return 0;           // niszczenie obiektów
}

