为什么我可以在C++中从外部访问私有方法?

use*_*164 7 c++

可能重复:
为什么允许通过基类的指针调用派生类的私有虚方法?

最近,我遇到了一个奇怪的问题,请参考以下代码:

#include <iostream>

using namespace std;

class A
{
    public:
        virtual void disp() {
            cout<<"A disp"<<endl;
        }

};

class B : public A
{
    private:
        void disp() {
            cout<<"B disp"<<endl;
        }
};

int main()
{
    A a;
    a.disp();

    A *b = new B();
    b->disp();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

A disp
B disp
Run Code Online (Sandbox Code Playgroud)

我想知道为什么指针b可以访问disp()?这是私人的!不是吗?

Dir*_*ple 7

disp()是公共的,因为你通过A*调用它,而disp()在A中被声明为public.因为它是虚拟的,所以调用B的disp版本,但这不会影响它是公共的还是私有的.