#include <iostream>
struct B
{
virtual void f() {}; // пусто
//virtual void f() = 0; // чистая виртуальная
virtual ~B() {} // виртуальный деструктор нужен для правильного удаления
};
struct D : B
{
virtual void f() { std::cout << "D::f()\n"; }
};
int main() {
B* b = new D;
b->f(); // Вызовет D::f()
delete b;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEIKewoJdmlydHVhbCB2b2lkIGYoKSB7fTsgLy8g0L/Rg9GB0YLQvgoJLy92aXJ0dWFsIHZvaWQgZigpID0gMDsgLy8g0YfQuNGB0YLQsNGPINCy0LjRgNGC0YPQsNC70YzQvdCw0Y8KCXZpcnR1YWwgfkIoKSB7fSAvLyDQstC40YDRgtGD0LDQu9GM0L3Ri9C5INC00LXRgdGC0YDRg9C60YLQvtGAINC90YPQttC10L0g0LTQu9GPINC/0YDQsNCy0LjQu9GM0L3QvtCz0L4g0YPQtNCw0LvQtdC90LjRjwp9OwoKc3RydWN0IEQgOiBCCnsKCXZpcnR1YWwgdm9pZCBmKCkgeyBzdGQ6OmNvdXQgPDwgIkQ6OmYoKVxuIjsgfSAKfTsKCgppbnQgbWFpbigpIHsKCQoJQiogYiA9IG5ldyBEOwoJCgliLT5mKCk7IC8vINCS0YvQt9C+0LLQtdGCIEQ6OmYoKQoJCglkZWxldGUgYjsKCQoJcmV0dXJuIDA7Cn0=