#include <iostream>
struct base
{
    virtual ~base()
    {
    }
    virtual void print() const
    {
        std::cout << "i'm a base";
    }
};
struct derived : base
{
    int a;
    virtual void print() const
    {
        std::cout << "i'm derived";
    }
};
int main()
{
    base* array = new derived[4];
    array[2].print();
    delete[] array;
}