Tried searching, nothing returns( i ithink).
Is it possible to make a vector of an abstract class?
For example, I have the super class Unit.
And I Have the subclasses soldier, vehicle, and bomber.
However I would want ever instance of any subclass in one vector, e.g. the vector UnitList can hold instances of both soldier and vehicle?
Is this possible? I'm using C++ if it helps.
Yes, but you'll need to use either pointers or smart pointers (I'd go with this).
struct X
{
virtual ~X() {} //<--- as pointed out in the comments
// a virtual destructor is required
// for correct deletion
virtual void foo() = 0;
};
struct Y : X
{
virtual void foo() { }
};
int main()
{
std::vector<X*> a;
a.push_back(new Y);
a[0]->foo();
for ( int i = 0 ; i < a.size() ; i++ )
delete a[i];
return 0;
}
Don't forget to delete the allocated memory.
Assume std::vector<X>
. This is illegal because:
If you want to initialize your vector with some number of elements, the allocation would fail. A vector stores objects internally in continuous memory. A preallocation would fail because it would mean it needed to create objects, which can't be done for abstract classes.
Even if you could, or the base class wasn't abstract, it wouldn't help too much, as you'd suffer from object slicing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With