C++是否有任何方法可以将一组派生类存储在基类的一个向量中,并仍然访问它们的成员

C++ Is there any way of storing a set of derived classes in one vector of the base class and still access their members?

本文关键字:向量 一个 成员 基类 访问 存储 方法 任何 是否 C++ 派生      更新时间:2023-10-16

假设我有一个基类base:

class Base
{
}

和一个派生类Derived1

class Derived1: Base
{
    int a;
}

现在我有了一个矢量:

std::vector<Base*>vec;

假设我已经给它附加了一个指向派生类实例的指针,现在我想访问它的成员a。还假设我知道我正在转换的类实际上是Derived1,而不是另一个派生类。

我读过其他答案,说将向量中的类强制转换为派生类是个坏主意,所以我希望避免这种情况。我还希望避免为每个派生类创建一个单独的向量,因为过一段时间就会变得非常混乱。如果有人提出的建议与我处理问题的方法相悖,但仍然允许我轻松地管理许多派生类,我会很高兴听到

其他人建议在向量中使用智能指针,但我不明白这是如何允许我访问派生类的成员的。如果这是一个好方法,如果有人能解释一下,我将不胜感激。

正如您提出的建议:请勿使用:

std::vector<Base*>vec;

相反:

std::vector<Base>vec;

但更重要的是,如果你知道vec会存储Derived1,为什么它不像:

std::vector<Derived1> vec;

现在,如果你不这样做,要访问成员a,你可以这样做:

for(auto iter = vec.begin();iter!=vec.end();iter++)
{
    Derived1* d = dynamic_cast<Derived*>(*iter);
    if(d!=NULL)
    {
        // do anything with d->a
    }
}