1

I want to create a parent class vector and push child objects to that vector. Also, I want to the child object's functions from this vector. My demo is like that:

#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;
}
Mureinik
  • 297,002
  • 52
  • 306
  • 350
zogac
  • 89
  • 4

1 Answers1

1

You could use a vector of pointers (i.e., vector<A*>), which would allow polymorphism:

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;
}
Mureinik
  • 297,002
  • 52
  • 306
  • 350