#include<iostream>
class A {
public:
void f() {
std::cout << "A::f" << std::endl;
}
virtual void g() {
std::cout << "A::g" << std::endl;
}
};
class B : public A {
public:
void f() {
std::cout << "B::f" << std::endl;
}
virtual void g() {
std::cout << "B::g" << std::endl;
}
};
int main(int argc, char** argv) {
A a;
B b;
A* aPtr = &a;
A* bPtr = &b;
aPtr->f();
aPtr->g();
bPtr->f();
bPtr->g();
return 0;
}
Is there anything surprising? Can you explain it?