#include #include #include #include class Vehicle { public: std::string name() const { return name_; } int number_of_wheels() const { return number_of_wheels_; } virtual ~Vehicle() = default; protected: Vehicle(const std::string &name, int number_of_wheels) : name_(name), number_of_wheels_(number_of_wheels) {} std::string name_; int number_of_wheels_; }; class Car : public Vehicle{ public: Car(const std::string &name, int horsepower) : Vehicle(name, 4), horsepower_(horsepower) {} int horsepower() const { return horsepower_; } private: int horsepower_; }; class Bike : public Vehicle { public: Bike(const std::string &name, bool has_derailleur) : Vehicle(name, 2), has_derailleur_(has_derailleur) {} bool has_derailleur() { return has_derailleur_; } private: bool has_derailleur_; }; void display_vehicle_info(std::vector> a){ for (int i = 0; i <=5; i++) { if(typeid (a) == typeid (Car)){ Car &some_car = dynamic_cast(*a[i]); std::cout << "car: " << some_car.name() << "has: " << some_car.horsepower() << " HP" << std::endl; } if(typeid (a) == typeid (Bike)){ Bike &some_bike = dynamic_cast(*a[i]); std::cout << "bike: " << some_bike.name() << " - derailleur: " << some_bike.has_derailleur() << std::endl; } } } // if(typeid (a) == typeid (Car)){ // Car *some_car = dynamic_cast(a[i].get()); // if (some_car != nullptr) { // cast successful // std::cout << i << ": HP" << some_car->horsepower() << std::endl; // } else { // nope // std::cout << i << ": not a Car" << std::endl; // } // } // if(typeid (a) == typeid (Bike)){ // Bike *some_bike = dynamic_cast(a[i].get()); // if (some_bike != nullptr) { // cast successful // std::cout << i << ": H_D" << some_bike->has_derailleur() << std::endl; // } else { // nope // std::cout << i << ": not a Bike" << std::endl; // } // } int main() { std::vector> vehicles; vehicles.emplace_back(std::make_unique("Fixie", false)); vehicles.emplace_back(std::make_unique("Porsche", 400)); vehicles.emplace_back(std::make_unique("Road Bike", true)); vehicles.emplace_back(std::make_unique("MTB", true)); vehicles.emplace_back(std::make_unique("Passat", 115)); display_vehicle_info(vehicles); }