#include <iostream>

using std::cout;

class Class1 {
public:
	Class1() { cout << "Class1 default ctor is called.\n"; }
	Class1(int i) { cout << "Class1 ctor(int " << i << ") is called.\n"; }
};

class Class2 : public Class1 {
public:
	Class2() { cout << "Class2 default ctor is called.\n"; }
	Class2(char c) { cout << "Class2 ctor(char '" << c << "' is called.\n"; }
};

class Class3 : public Class2 {
public:
	Class3() : Class2('x') { cout << "Class3 default ctor is called.\n"; }
};

int main() {
	cout << "Class1 obj1\n";
	Class1 obj1;
	cout << "-------------------------------\n\n";

	cout << "Class1 obj2(123)\n";
	Class1 obj2(123);
	cout << "-------------------------------\n\n";

	cout << "Class2 obj3\n";
	Class2 obj3;
	cout << "-------------------------------\n\n";

	cout << "Class2 obj4('z')\n";
	Class2 obj4('z');
	cout << "-------------------------------\n\n";

	cout << "Class3 obj5\n";
	Class3 obj5;
	cout << "-------------------------------\n\n";

	return 0;
}
