#include <iostream>

class A
{
public:
	A() {}	
	virtual ~A();
	int aVar;
};
A::~A()
{
	std::cout << "Call ~A()" << std::endl;
}

class B : public A
{
public:
	B() {}
	virtual ~B();
};
B::~B()
{
	std::cout << "Call ~B()" << std::endl;
}

class C : public B
{
public:
	C() {}
	int cVar;
	virtual ~C();
};
C::~C()
{
	std::cout << "Call ~C() [cVar == " << cVar << "]" << std::endl;
}


int main()
{
	A* aObj = new A;
	aObj->aVar = 777;

	B* bObj = new(aObj)B;
	
	C* cObj1 = new(bObj)C;
	//cObj1->cVar = 1;

	C* cObj2 = new(bObj)C;
	//cObj2->cVar = 2;
			
	delete bObj;
	
	return 0;
}