#include <iostream>
using namespace std;
struct A {
virtual void foo() const {
cout << "Hello from A" << endl;
}
};
struct B: A {
virtual void foo() {
cout << "Hello from B" << endl;
}
};
struct C: B {
void foo() {
cout << "Hello from C" << endl;
}
void foo() const {
cout << "Hello from C const" << endl;
}
};
int main() {
A* b = new B();
b->foo();
((B*)b)->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEEgewoJdmlydHVhbCB2b2lkIGZvbygpIGNvbnN0IHsKCQljb3V0IDw8ICJIZWxsbyBmcm9tIEEiIDw8IGVuZGw7Cgl9Cn07CgpzdHJ1Y3QgQjogQSB7Cgl2aXJ0dWFsIHZvaWQgZm9vKCkgewoJCWNvdXQgPDwgIkhlbGxvIGZyb20gQiIgPDwgZW5kbDsKCX0KfTsKCnN0cnVjdCBDOiBCIHsKCXZvaWQgZm9vKCkgewoJCWNvdXQgPDwgIkhlbGxvIGZyb20gQyIgPDwgZW5kbDsKCX0KCXZvaWQgZm9vKCkgY29uc3QgewoJCWNvdXQgPDwgIkhlbGxvIGZyb20gQyBjb25zdCIgPDwgZW5kbDsKCX0KfTsKCmludCBtYWluKCkgewoJQSogYiA9IG5ldyBCKCk7CgliLT5mb28oKTsKCSgoQiopYiktPmZvbygpOwoJCglyZXR1cm4gMDsKfQ==