#include class A { public: void f() { cout << "virtual " << (*this).v() << " static " << (*this).s() << endl; } protected: virtual int v() { return 1; } static int s() { return 1; } }; class B : public A { int v() { return 2; } int s() { return 2; } }; int main() { (*(new B())).f(); // prints "virtual 2 static 1" return 0; }