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

标签 c++

<分区>

Possible Duplicate:
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()?这是私有(private)的!不是吗?

最佳答案

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

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

相关文章:

c++ - shared_ptr 的引用仍然是指针吗?

c++ - 如何在构造函数初始化列表中进行深层复制。 C++

c++ - Visual Studio13 创建线程和优化流程

即使类没有定义构造函数,也不能在类上调用 C++ 默认移动赋值运算符

c++ - 为最终的 future 自定义内存分配器做准备

c++ - OpenCV是否用零初始化权重矩阵,cv::ml::ANN_MLP

c++ - MPI 是否丢弃或延迟消息?

c++ - 如何在 Visual Studio 2005 及更高版本中自动更改项目设置

c++ - 预编译头文件,重新包含文件和智能感知

C++ 可以根据接受的值返回两种类型之一的函数