#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);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQ2FyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIERyaXZlKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkNhcjo6RHJpdmUiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIFRveW90YSA6IHB1YmxpYyBDYXIKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgRHJpdmUoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiVG95b3RhOjpEcml2ZSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKY2xhc3MgUHJpdXMgOiBwdWJsaWMgQ2FyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIERyaXZlKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlByaXVzOjpEcml2ZSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKCnZvaWQgRG9TdHVmZihDYXIqIGMpCnsKICAgIGMtPkRyaXZlKCk7Cn0KCmludCBtYWluKCkKewogICAgQ2FyIGM7CiAgICBUb3lvdGEgdDsKICAgIFByaXVzIHA7CgogICAgRG9TdHVmZigmYyk7CiAgICBEb1N0dWZmKCZ0KTsKICAgIERvU3R1ZmYoJnApOwp9