Использование маркировки функции как виртуальной заключается в том, что вы просите компилятор отложить или выяснить «ТИП» объекта, вызывающего эту функцию во время выполнения, а не обычным способом «время компиляции». Это достигается с помощью указателей на объекты. Таким образом, чтобы выразить это в простой строке «Использовать указатели на объекты, чтобы использовать виртуальные функции».

оложим, у меня есть класс с виртуальной функцией и производный класс, который реализует виртуальную функцию другим способом. Предположим, у меня также есть вектор базового класса, используемый для хранения производных классов. Как мне выполнить виртуальную функцию производного класса в векторе, не зная заранее, что такое производный класс? Минимальный код, который иллюстрирует проблему:

#include <iostream>
#include <vector>

class Foo {
public:
    virtual void do_stuff (void) {
        std::cout << "Foo\n";
    }
};

class Bar: public Foo {
public:
    void do_stuff (void) {
        std::cout << "Bar\n";
    }
};

int main (void) {
    std::vector <Foo> foo_vector;
    Bar bar;

    foo_vector.resize (1);
    foo_vector [0] = bar;

    bar.do_stuff ();            /* prints Bar */
    foo_vector [0].do_stuff (); /* prints Foo; should print Bar */
    return 0;
}

Ответы на вопрос(3)

Ваш ответ на вопрос