Может кто-нибудь объяснить преимущества полиморфизма?

Я хорошо понимаю, как это работает, но я просто не могу понять, что делает его полезным. Вам все еще нужно определить все отдельные функции, вам все равно нужно создать экземпляр каждого объекта, так почему бы просто не вызвать функцию из этого объекта, а не создать объект, создать указатель на родительский объект и передать ссылку на производные объекты, просто вызвать функцию? Я не понимаю преимуществ этого дополнительного шага.

Почему это:

class Parent
{
    virtual void function(){};
};

class Derived : public Parent
{
    void function()
    {
    cout << "derived";
    }
};

int main()
{
    Derived foo;
    Parent* bar = &foo;
    bar->function();
    return -3234324;
}

против этого:

class Parent
{
    virtual void function(){};
};

class Derived : public Parent
{
    void function()
    {
    cout << "derived";
    }
};

int main()
{
    Derived foo;
    foo.function();
    return -3234324;
}

Они делают то же самое, правильно? Насколько я могу судить, только один использует больше памяти и больше путаницы.

7
задан Michael Foukarakis 5 February 2012 в 07:07
поделиться