#include <iostream>
#include <vector>

using namespace std;

class Vehicle
{
public:
	void print()
	{
		cout << "print()" << endl;
	}
	
	virtual ~Vehicle()  {}
};

class FastVehicle : public Vehicle
{
public:
	void print(int a)
	{
		cout << "print(" << a << ")" << endl;
	}
	
	void somethingElse()
	{
		cout << "Something else..." << endl;
	}
};

int main()
{
	vector<Vehicle*> vehicleVector;
	
	vehicleVector.push_back(new Vehicle());
	vehicleVector.push_back(new FastVehicle());
	vehicleVector.push_back(new Vehicle());
	
	for(Vehicle* vehicle : vehicleVector)
	{
	    FastVehicle* fastVehicle = dynamic_cast<FastVehicle*>(vehicle);
	
	    if(fastVehicle)
	    {
	        fastVehicle->print(1337);
	        fastVehicle->somethingElse();
	    }
	    else
	    {
	        vehicle->print();
	    }
	}

	return 0;
}