#include <iostream>
#include <cstdlib>

using namespace std;

struct IGetA
{
    virtual int getA() = 0;
};

class Base : public IGetA
{
protected:
    int a;
public:
    int getA()
    {
        return a;
    }
};

class Derived : public Base
{
protected:
    int b;
};

class Set
{
protected:
    IGetA* dataArray;
public:
    void run1()
    {
        int c = 5;
        dataArray = new Derived[c];
        cout << dataArray[3].getA(); // case 1
    }
};

void run2(IGetA* b, int index )
{
    cout << b[index].getA();
}

int main()
{
    Set set1;
    set1.run1();//case 1

    Derived set2[5];
    run2(set2, 3);// case 2

    return 0;
}