#include <iostream>

class Car
{
public:
    virtual void Drive()
    {
        std::cout << "Car::Drive" << std::endl;
    }
};

class Toyota : public Car
{
public:
    virtual void Drive()
    {
        std::cout << "Toyota::Drive" << std::endl;
    }
};

class Prius : public Car
{
public:
    virtual void Drive()
    {
        std::cout << "Prius::Drive" << std::endl;
    }
};


void DoStuff(Car* c)
{
    c->Drive();
}

int main()
{
    Car c;
    Toyota t;
    Prius p;

    DoStuff(&c);
    DoStuff(&t);
    DoStuff(&p);
}