fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <typeinfo>
  4. #include <memory>
  5.  
  6. using namespace std;
  7.  
  8. class Tour
  9. {
  10. public:
  11. Tour() {}
  12.  
  13. virtual void Display() const { cout << "NOT guided tour." << endl; }
  14. };
  15.  
  16. class GuidedTour : public Tour
  17. {
  18. public:
  19. GuidedTour() : Tour() {}
  20.  
  21. void Display() const { cout << "Guided tour." << endl; }
  22. };
  23.  
  24. int main()
  25. {
  26. std::vector<std::unique_ptr<Tour>> list;
  27.  
  28. list.emplace_back(new Tour);
  29. list.emplace_back(new GuidedTour);
  30. list.emplace_back(new Tour);
  31. list.emplace_back(new GuidedTour);
  32. list.emplace_back(new Tour);
  33.  
  34. for ( auto& t : list )
  35. {
  36. if ( typeid(*t) == typeid(GuidedTour) )
  37. cout << "TypeId : GuidedTour" << endl;
  38. else
  39. cout << "TypeId : Not GuidedTour" << endl;
  40.  
  41. t->Display();
  42. }
  43. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
TypeId : Not GuidedTour
NOT guided tour.
TypeId : GuidedTour
Guided tour.
TypeId : Not GuidedTour
NOT guided tour.
TypeId : GuidedTour
Guided tour.
TypeId : Not GuidedTour
NOT guided tour.