#include <iostream>

using std::cout;

class Class1 {
public:
	~Class1() { cout << "Class1 destructor is called.\n"; }
};

class Class2 : public Class1 {
public:
	~Class2() { cout << "Class2 destructor is called.\n"; }
};

class Class3 : public Class2 {
public:
	~Class3() { cout << "Class3 destructor is called.\n"; }
};

int main() {
	cout << "Class1 *obj1 = new Class1; delete obj1;\n";
	Class1 *obj1 = new Class1; delete obj1;
	cout << "-------------------------------\n\n";

	cout << "Class2 *obj2 = new Class2; delete obj2;\n";
	Class2 *obj2 = new Class2; delete obj2;
	cout << "-------------------------------\n\n";

	cout << "Class3 *obj3 = new Class3; delete obj3;\n";
	Class3 *obj3 = new Class3; delete obj3;
	cout << "-------------------------------\n\n";

	return 0;
}
