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

C++ 为什么我可以从C+;中的外部访问私有方法+;?,c++,C++,可能重复: 最近,我遇到了一个奇怪的问题,请参考以下代码: #include <iostream> using namespace std; class A { public: virtual void disp() { cout<<"A disp"<<endl; } }; class B : public A { private: void disp() {

可能重复:

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

#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();
}

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

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

这是通过语言设计实现的。但是,在派生时加强方法保护级别是一种不好的做法

它不适用于通过
a::disp
访问它的类是公共的;这是main访问的唯一一个
disp
。在我看来,将继承的虚拟方法声明为
virtual
,也是一个很好的做法。@Aesthete:同意。易读
A disp
B disp