#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFZlaGljbGUKewpwdWJsaWM6Cgl2b2lkIHByaW50KCkKCXsKCQljb3V0IDw8ICJwcmludCgpIiA8PCBlbmRsOwoJfQoJCgl2aXJ0dWFsIH5WZWhpY2xlKCkgIHt9Cn07CgpjbGFzcyBGYXN0VmVoaWNsZSA6IHB1YmxpYyBWZWhpY2xlCnsKcHVibGljOgoJdm9pZCBwcmludChpbnQgYSkKCXsKCQljb3V0IDw8ICJwcmludCgiIDw8IGEgPDwgIikiIDw8IGVuZGw7Cgl9CgkKCXZvaWQgc29tZXRoaW5nRWxzZSgpCgl7CgkJY291dCA8PCAiU29tZXRoaW5nIGVsc2UuLi4iIDw8IGVuZGw7Cgl9Cn07CgppbnQgbWFpbigpCnsKCXZlY3RvcjxWZWhpY2xlKj4gdmVoaWNsZVZlY3RvcjsKCQoJdmVoaWNsZVZlY3Rvci5wdXNoX2JhY2sobmV3IFZlaGljbGUoKSk7Cgl2ZWhpY2xlVmVjdG9yLnB1c2hfYmFjayhuZXcgRmFzdFZlaGljbGUoKSk7Cgl2ZWhpY2xlVmVjdG9yLnB1c2hfYmFjayhuZXcgVmVoaWNsZSgpKTsKCQoJZm9yKFZlaGljbGUqIHZlaGljbGUgOiB2ZWhpY2xlVmVjdG9yKQoJewoJICAgIEZhc3RWZWhpY2xlKiBmYXN0VmVoaWNsZSA9IGR5bmFtaWNfY2FzdDxGYXN0VmVoaWNsZSo+KHZlaGljbGUpOwoJCgkgICAgaWYoZmFzdFZlaGljbGUpCgkgICAgewoJICAgICAgICBmYXN0VmVoaWNsZS0+cHJpbnQoMTMzNyk7CgkgICAgICAgIGZhc3RWZWhpY2xlLT5zb21ldGhpbmdFbHNlKCk7CgkgICAgfQoJICAgIGVsc2UKCSAgICB7CgkgICAgICAgIHZlaGljbGUtPnByaW50KCk7CgkgICAgfQoJfQoKCXJldHVybiAwOwp9