class A { public: A():i(10){} int get_i() { cout << "A.get_i" << endl; return i; } private: int i; }; class B :public A { public: B():j(20){} int get_i() { cout << "B.get_i" << endl; return 0; } void f() { cout << "B.i = "<< A::get_i() << " B.j = " << j << endl; } private: int j; }; int main() { A a; B b; A*pa = &b; //不把b当B看了,只取它A的特性。 pa->get_i(); pa->f(); //这是非法的! return 0; }
不把b当B看了,而是把它当成一个A,只取它里面A属性的部分。
所以,pa->get_i()调用的实际上是A的get_i()
pa->f()是一个非法调用。因为A里面没有f函数。