gpt4 book ai didi

类错误的 C++ vector

转载 作者:行者123 更新时间:2023-11-28 07:29:16 24 4
gpt4 key购买 nike

我明白了

#include <vector>
using namespace std;

class A{
protected:
int test;
public:
void test(){}
};
class B : public class A{
public:
void test2(){}
};

int main(){
vector <A> new_vector;
A a1;
new_vector.push_back(a1);
B b1;
new_vector.push_back(b1);

new_vector[0].test();
//THE PROBLEM IS HOW DO I DO THIS:
new_vector[1].test2();

逻辑上是可能的,但它给了我一个错误,我如何以正确的方式做到这一点?

在 python 中,我一直以一种非常简单的方式做类似的事情,在 c++ 中是可能的吗?

最佳答案

你的问题是 vector 只包含一个 A 对象的空间,没有办法在其中容纳一个 B

对于多态性,你需要一个指针、引用或智能指针。为了帮助进行生命周期管理,建议使用后者。

std::vector<std::unique_ptr<A>> new_vector;
new_vector.emplace_back(new A());
new_vector.emplace_back(new B());

然后您可以在元素上使用dynamic_cast 来发现是否真的有B 并调用B 特定成员。

但是,对于多态行为,使用虚成员函数比dynamic_cast要高效得多。

关于类错误的 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029114/

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