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

时间:2012-08-16 12:20:58

标签: c++

  

可能重复:
  Why is it allowed to call derived class' private virtual method via pointer of base class?

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

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

,输出为:

A disp
B disp

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

这是语言设计。然而,在推导

时加强方法保护水平是一种不好的做法