/**
 * Multiple Inheritance issues
 * Example 1
 */

#include <iostream>
using namespace std;

class GrandParent
{
    public:
        char InstanceName[255];

        GrandParent()
        {
            cout << "In GrandParent class ctor" << endl;
            strcpy( InstanceName,"GrandParent");
        }

        ~GrandParent()
        {
            cout << "In GrandParent class dtor" << endl;
        }

};


class Parent1:public GrandParent
{
    public:
        Parent1()
        {
            cout << "In Parent1 class ctor" << endl;
            strcpy( this->InstanceName, "Parent1" );
        }

        ~Parent1()
        {
            cout << "In Parent1 class dtor" << endl;
        }

        virtual char * Id (void )
        {
            return "Parent1";
        }
};

class Parent2:public GrandParent
{
    public:
        Parent2()
        {
            cout << "In Parent2 class ctor" << endl;
            strcpy( this->InstanceName, "Parent2" );
        }

        ~Parent2()
        {
            cout << "In Parent2 class dtor" << endl;
        }

        virtual char * Id (void )
        {
            return "Parent2";
        }
};


class Child: public Parent1, public Parent2
{
    public:
        Child()
        {
            cout << "In Child class ctor" << endl;
        }

        ~Child()
        {
            cout << "In child class dtor" << endl;
        }

        virtual char * Id ( void )
        {
            return "Child";
        }

};

int main( int argc, char *argv[])
{
    Child bar;

    cout << "Instance Name: "
        // << bar.InstanceName //g++ complains InstanceName is ambigous
         <<  bar.Parent1::InstanceName << "\t" << bar.Parent2::InstanceName
         << endl;
}