我明白了
#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/