#include <iostream>
class Car
{
public:
virtual void Drive()
{
std::cout << "Car::Drive" << std::endl;
}
};
class Toyota : public Car
{
public:
void Drive()
{
std::cout << "Toyota::Drive" << std::endl;
}
};
class Prius : public Car
{
public:
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);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQ2FyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIERyaXZlKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkNhcjo6RHJpdmUiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIFRveW90YSA6IHB1YmxpYyBDYXIKewpwdWJsaWM6CiAgICB2b2lkIERyaXZlKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRveW90YTo6RHJpdmUiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIFByaXVzIDogcHVibGljIENhcgp7CnB1YmxpYzoKICAgIHZvaWQgRHJpdmUoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUHJpdXM6OkRyaXZlIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgoKdm9pZCBEb1N0dWZmKENhciogYykKewogICAgYy0+RHJpdmUoKTsKfQoKaW50IG1haW4oKQp7CiAgICBDYXIgYzsKICAgIFRveW90YSB0OwogICAgUHJpdXMgcDsKCiAgICBEb1N0dWZmKCZjKTsKICAgIERvU3R1ZmYoJnQpOwogICAgRG9TdHVmZigmcCk7Cn0=