#include <iostream>
using namespace std;
class Vehicle {
public:
virtual void show() { cout<<"I'm a vehicle"<<endl; } // virtual
void print() { cout <<"I'm a vehicle"<<endl; } // not virtual
void invokeshow() { show(); } // not virtual but invoking virtual
void invokespecificshow() { Vehicle::show(); } // not virtual invoking specific
~Vehicle() {} //at least one virtual ? then virtual destructor
};
class Motorcycle: public Vehicle {
public:
void show() override { cout<<"I'm a motorcycle"<<endl; }
void print() { cout <<"I'm a motorcycle"<<endl; }
};
void test(Vehicle &v) {
v.show();
v.print();
v.invokeshow();
v.invokespecificshow();
}
int main() {
Motorcycle mt;
test(mt);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVmVoaWNsZSB7CnB1YmxpYzogIAogICAgdmlydHVhbCB2b2lkIHNob3coKSB7IGNvdXQ8PCJJJ20gYSB2ZWhpY2xlIjw8ZW5kbDsgfSAgIC8vIHZpcnR1YWwKICAgIHZvaWQgcHJpbnQoKSB7IGNvdXQgPDwiSSdtIGEgdmVoaWNsZSI8PGVuZGw7IH0gICAgICAgICAvLyBub3QgdmlydHVhbAogICAgdm9pZCBpbnZva2VzaG93KCkgeyBzaG93KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCB2aXJ0dWFsIGJ1dCBpbnZva2luZyB2aXJ0dWFsCiAgICB2b2lkIGludm9rZXNwZWNpZmljc2hvdygpIHsgVmVoaWNsZTo6c2hvdygpOyB9ICAgICAgICAgLy8gbm90IHZpcnR1YWwgaW52b2tpbmcgc3BlY2lmaWMKICAgIH5WZWhpY2xlKCkge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYXQgbGVhc3Qgb25lIHZpcnR1YWwgPyAgdGhlbiB2aXJ0dWFsIGRlc3RydWN0b3IKfTsgCgpjbGFzcyBNb3RvcmN5Y2xlOiBwdWJsaWMgVmVoaWNsZSB7CnB1YmxpYzogIAogICAgdm9pZCBzaG93KCkgb3ZlcnJpZGUgeyBjb3V0PDwiSSdtIGEgbW90b3JjeWNsZSI8PGVuZGw7IH0KICAgIHZvaWQgcHJpbnQoKSB7IGNvdXQgPDwiSSdtIGEgbW90b3JjeWNsZSI8PGVuZGw7IH0KfTsgCgp2b2lkIHRlc3QoVmVoaWNsZSAmdikgewoJdi5zaG93KCk7IAoJdi5wcmludCgpOwoJdi5pbnZva2VzaG93KCk7IAoJdi5pbnZva2VzcGVjaWZpY3Nob3coKTsgCn0KCmludCBtYWluKCkgewoJTW90b3JjeWNsZSBtdDsgCgl0ZXN0KG10KTsKCXJldHVybiAwOwp9