假設我有與虛擬功能和實現以不同的方式在虛擬函數的派生類的類的虛擬功能。假設我也有一個用於存儲派生類的基類的向量。如何在向量中執行派生類的虛函數而不事先知道派生類是什麼?說明問題的最小代碼:C++:調用派生類
#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;
}
也許使用'的std ::矢量'(由指針,或參照),以避免物體切片?否則,當你將'bar'對象賦值給vector時,它就被分割了(一個新的'Foo'被創建並存儲在vector中,而不是你的'bar'),這可能不是你想要的。不過,使用指針會使代碼更復雜。 –
rwong
2011-06-05 00:21:34