Supongamos que tengo una clase con una función virtual y una clase derivada que implementa la función virtual de una manera diferente. Supongamos que también tengo un vector de la clase base utilizada para almacenar clases derivadas. ¿Cómo podría ejecutar la función virtual de una clase derivada en el vector sin saber de antemano cuál es la clase derivada? Código mínimo que ilustra el problema:C++: Llamar a la función virtual de la clase derivada
#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;
}
¿Quizás usando 'std :: vector' (por puntero, o por referencia), para evitar el corte de objetos? De lo contrario, en el momento en que asigna el objeto 'bar' al vector, se corta (se crea un nuevo' Foo' y se almacena en el vector, en lugar de su 'barra'), que probablemente no es lo que quiere. Sin embargo, usar un puntero hará que el código sea más complicado. –
rwong