类是编译期的概念,也是“访问权限”、“成员数据”、“成员函数”,这几个概念的“作用域”。而对象的作用域是运行期。它包括类的实例、引用和指针。
A *pA = new B(); 这里 pA 是一个 A* , 所以就作为一个A类的指针参与了编译;
因此从pA调用f()在编译器眼中,就是调用了A类的公开成员函数f()因此通过编译;然后在运行时,由于多态作用pA调用的f()是派生类的f()成员函数。
虽然这时f()是private成员函数,但是由于 private/public 这些访问控制是编译时的限制,在运行时无效,所以B::f() 被成功调用。
网友评论