C++ 从 parents 的向量中调用 child 的方法?

C++ call a child's method from a vector of parents?

假设您有以下 class:

class Parent
{
   // methods and members go here
};

然后你创建一个 child 基于 parent:

class Child : public Parent
{
   public:
      someFunction();
};

现在 class Parent 没有 someFunction() 但 class Child 有。假设您有一个 Parent classes 的向量,并且您想要调用 child 的方法,假设该向量包含 parents 和 children,因为它们都是相同的基本类型。

std::vector<Parent> myContainer;
myContainer.push_back(a parent);
myContainer.push_back(a child);

myContainer[1].someFunction();

我怎样才能完成这项工作?我基本上是在尝试创建一个 parents 的矢量,但 children 也进入该矢量。我想调用一个 children 独有的方法。这可能吗?

您创建了一个包含 Parent 个对象的向量。这里没有多态性。向量包含值。如果你想要一个多态容器,你必须使用其他东西。

就像你做的那样

Parent myObject;

无论您以后对 myObject 做什么,它仍然是 Parent。即使你这样做 myObject = Child().

多态性只适用于指针和引用,所以如果你创建一个指针向量,那么它是可能的。

class Parent
{
    virtual void foo(){}    //dummy function to make Parent polymorphic
};
class Child : virtual public Parent
{
public:
    void about()
    {
        cout << "Child" << endl;
    }
};
int main()
{

    vector<Parent*> vec;
    vec.push_back(new Parent());
    vec.push_back(new Child());

    for (int i = 0; i < vec.size(); i++)
    {
        Child *child = dynamic_cast<Child*>(vec.at(i));
        if (child)
            child->about();     
    }

    return 0;
}