Your code actually doesn't print anything as the std::vector
would initially be empty. Other than that, your problem is caused by object slicing (I'm assuming that you are push_back()
ing GuidedTour
s into the vector).
When object slicing takes place, you are storing only the Tour
part of your GuidedTour
object(s), and that's the reason why you are seeing the output of Tour::display()
.
To solve your problem, you need to store the objects polymorphically, by using (smart) pointers and dynamically-allocating your objects.
int main()
{
vector <std::unique_ptr<Tour>> tourList;
for(...) {
tourList.push_back(std::make_unique<GuidedTour>(/* constructor parameters */));
...
tourList.push_back(std::make_unique<Tour>(/* constructor parameters */));
}
for (unsigned int i = 0; i < tourList.size(); i++)
{
tourList[i]->display();
}
}
Notice that I am using std::unique_ptr
/std::make_unique
and not raw new
ed pointers. Using them would greatly ease you of the problem of manually managing and delete
ing your objects, which sometimes[understatement] are the cause of bugs and undefined behavior.
Note that some people might suggest you to use boost::ptr_vector
or something similar. Listen to them, especially if they give you arguments on why they are better than the alternatives.