gpt4 book ai didi

C++:调用派生类的虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:38 27 4
gpt4 key购买 nike

假设我有一个带有虚函数的类和一个以不同方式实现虚函数的派生类。假设我还有一个用于存储派生类的基类的 vector 。在事先不知道派生类是什么的情况下,如何在 vector 中执行派生类的虚函数?说明问题的最少代码:

#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;
}

最佳答案

你不能。 vector 中的对象将被切片——任何派生类实例数据都将被切掉,因此调用该方法将是一个非常糟糕的主意。

另一方面,如果您有一个指向基的指针 vector ,那么您只需调用虚拟方法,派生类版本就会被调用。

关于C++:调用派生类的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com