#include <iostream>

/* dangers of shadowing a data member */

using namespace std;

class A1{
public:
    int data;
    int getData(){return data;}
    A1(int start = 5): data(start) {}
};

class A2: public A1{
public:
    A2(double start = 6.5): A1(), data(start){}
    double getData(){return data;}
    double data;
};

int main(){

    A1 * a1Ptr;
    A2 a2;
    cout << a2.getData() << endl;

    a1Ptr = &a2;
    cout << a1Ptr->getData() << endl;

    A1 a1;
    //A2* a2Ptr = static_cast<A2*>(&a1);

    if (A2* a2Ptr = dynamic_cast<A2*>(a1Ptr))
	cout << "worked\n";

    return 0;

}

