为什么我可以在C++从外部访问私人方法
why I can access private method from outside in 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();
}
输出为:
A disp
B disp
我想知道为什么指针 b 可以访问 disp()?这是私人的!不是吗?
disp() 是公共的,因为你通过 A* 调用它,而 disp() 在 A 中声明为公共。由于它是虚拟的,因此调用了 B 的 disp 版本,但这不会影响它是公共的还是私有的。
这是语言设计。但是,在派生时加强方法保护级别是一种不好的做法
相关文章:
- 通过方法访问结构
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 类变量无法从类方法访问
- 为什么从静态方法访问非静态方法是糟糕的设计
- 子类是否也在 c++ 中继承私有数据成员?但通过超类的公共方法访问
- 如何从回调方法访问自定义类成员
- 使初始化变量可供多个属性初始化方法访问
- 从c++中的方法访问指向对象的专用指针数组
- C++如何通过回调方法访问成员变量
- "undefined reference"从静态方法访问的模板类的静态成员
- 如何从方法访问类成员
- 类静态方法访问其静态数据成员
- 从静态方法访问非静态成员的工作示例
- 类方法访问其数据成员
- 通过公共方法访问私有成员变量
- 为什么无法从模板方法访问此类自己的受保护成员?
- 通过非静态方法访问静态成员
- JNI保留对对象的全局引用,并使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动状态
- 如何让一个方法访问其他模板类实例的私有成员
- 方法访问C++中的对象实例化