这个问题已经在这里有了答案:




已关闭8年。






最近,我遇到一个奇怪的问题,请引用以下代码:

#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()?是私有(private)的!是不是

最佳答案

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

关于c++ - 为什么我可以在C++中从外部访问私有(private)方法? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11987003/

10-13 08:13