#include <iostream>
#include <ostream>
class B {
public:
int i;
virtual void print_i() const { std::cout << i << " inside B" << std::endl; }
};
class D : public B {
public:
void print_i() const { std::cout << i << " inside D" << std::endl; }
};
int main() {
B b;
B *pb = &b; // point at a B object
D f;
f.i = 1 + (b.i = 1);
pb->print_i(); // Call B::print_i()
pb = &f; // point at D object
pb->print_i(); // Call D::print_i()
}