类错误的 C++ vector

标签 c++ class function vector polymorphism

我明白了

#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/

相关文章:

python - 提取字典字段用作函数名称

c++ - 我可以有一个 lambda 指针数组来保存具有不同类型参数/返回值的函数吗?

javascript - NodeJS 使用另一个文件中的类

PHP:速记开关

c++ - 改进我的四叉树设计?

c++ - 对于在 Linux 中正常构建的 C++ 程序,VS2010 中的编译失败

c++ - 我可以验证预处理器宏以确保它是一个数字吗?

C++,将自定义占位符与函数参数匹配

css - A.类 :LINK only works for 1st element in Firefox

c++ - 符合条件的声明符 ID 后的名称查找