#include <iostream>
class Car
{
public:
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);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQ2FyCnsKcHVibGljOgogICAgdm9pZCBEcml2ZSgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJDYXI6OkRyaXZlIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpjbGFzcyBUb3lvdGEgOiBwdWJsaWMgQ2FyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIERyaXZlKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRveW90YTo6RHJpdmUiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIFByaXVzIDogcHVibGljIENhcgp7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBEcml2ZSgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJQcml1czo6RHJpdmUiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCgp2b2lkIERvU3R1ZmYoQ2FyKiBjKQp7CiAgICBjLT5Ecml2ZSgpOwp9CgppbnQgbWFpbigpCnsKICAgIENhciBjOwogICAgVG95b3RhIHQ7CiAgICBQcml1cyBwOwoKICAgIERvU3R1ZmYoJmMpOwogICAgRG9TdHVmZigmdCk7CiAgICBEb1N0dWZmKCZwKTsKfQ==