如何使用父对象向量中子对象的重写函数? [重复]

问题描述 投票:0回答:1

我想创建一个父类向量并将子对象推送到该向量。另外,我想从这个向量中获取子对象的函数。我的演示是这样的:

#include <iostream>
#include <vector>

class A
{
    public:
        virtual void print() { std::cout << "A"; }
};

class B: public A
{
    public:
        void print() override { std::cout << "B"; }
};

class C: public A
{
    public:
        void print() override { std::cout << "C"; }
};

int main()
{
    std::vector<A> list;

    B obj1;
    list.push_back(obj1);

    C obj2;
    list.push_back(obj2);

    for(int i=0; i<list.size(); i++)
        list[i].print();

    //Expected output: BC

    return 0;
}
c++ oop vector parent-child virtual
1个回答
1
投票

您可以使用指针向量(即

vector<A*>
),这将允许多态性:

int main()
{
    std::vector<A*> list;

    B obj1;
    list.push_back(&obj1);

    C obj2;
    list.push_back(&obj2);

    for(int i=0; i<list.size(); i++) {
        list[i]->print();
    }

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.