#include <iostream>
using namespace std;
class a
{
protected:
int A;
public:
a() : A(0) {
cout<<"DC : A OBJ CREATED : "<<(size_t)(this)<<endl;
}
int data() const {
return A;
}
virtual ~a(){}
};
class b: public a
{
protected:
int B;
public:
b() : B(1) { a::A = B; }
};
class c: public a
{
protected:
int C;
public:
c() : C(2) { a::A = C; }
};
int main(){
b B;
c C;
a * ptrB = dynamic_cast<a *>(&B);
a * ptrC = dynamic_cast<a *>(&C);
if( ptrB &&ptrC )
*ptrB = *ptrC;
cout<<B.data()<<endl;
return 0;
}