Обобщенные типы

#include <iostream>
#include <vector>
using namespace std

class Vehicle {
public:
    void test() {
        cout << "test: ";
        cout << typeid(this).name() << endl;
    }
};

class Carpublic Vehicle { };

class Truckpublic Vehicle { };

vector<Vehiclelist;
Vehicle vehicle;
Car car;
Truck truck;

list.push_back(vehicle);
list.push_back(car);
list.push_back(truck);

for (auto curVehicle : list) {
    curVehicle.test();
}