#include // cout, endl #include // EXIT_SUCCESS using std::cout; using std::endl; class A { public: void M1() { cout << "a1, "; } virtual void M2() { cout << "a2"; } }; class B : public A { public: void M1() { cout << "b1, "; } void M2() { cout << "b2"; } }; int main(int argc, char** argv) { A a; B b; A* a_ptr_a = &a; A* a_ptr_b = &b; // B* ba_ptr = &a; // compiler error B* b_ptr_b = &b; a_ptr_a->M1(); a_ptr_a->M2(); cout << endl; a_ptr_b->M1(); a_ptr_b->M2(); cout << endl; b_ptr_b->M1(); b_ptr_b->M2(); cout << endl; return EXIT_SUCCESS; }