调用私有函数并且它有效.请你们中的任何人推理一下
Private function invoked and it works. Could any of you reason it please
我可以调用派生类的私有函数。可以吗?
#include <iostream>
class A {
public:
virtual ~A() {}
virtual void func()
{
std::cout << " Printing from A" << std::endl;
}
};
class B : public A {
private:
virtual void func()
{
std::cout<< " Printing from B"<<std::endl;
}
};
main()
{
B b;
A* a = &b;
a->func();
// b.func(); Not possible as expected.
}
下面是输出
从 B 打印
对虚函数的访问由其在对象的静态类型中的声明确定,而不是由动态类型中重写函数的声明确定。
§11.5 [class.access.virt] 虚函数的访问规则(条款 11)由其声明确定,不受稍后覆盖它的函数的规则的影响。
使用用于表示调用成员函数的对象的表达式的类型在调用点检查访问。成员函数在定义它的类中的访问通常是未知的。
由于A::func
是public
的,通过指向A
的指针多态地调用B::func
是可以的。
访问说明符是在进行调用的对象、指针或引用的静态类型级别检查的,即使调用被调度到所指向/引用的对象的动态类型也是如此。在您的情况下,a->func()
是通过 A*
类型的指针调用的,因此在A
级别检查访问说明符,其中func()
是公共的。
相关文章:
- 推理类型如何工作"auto"和按引用调用?
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 任何人都可以解释一下我是否需要 & 在第一个代码片段中
- 任何人都可以查明我的递归函数中的错误吗?
- 我可以在"std"命名空间中添加推理指南吗?
- C++活动异常机制背后的推理
- 如何在使用 TensorRT C++ API 编写的 TensorRT 模型上运行半精度推理?
- 交叉和计算,任何人都可以解释代码吗?
- 我的合并排序没有给出正确的排序数组,任何人都可以解释一下吗?
- 任何人都可以解释这个初始值设定项代码吗?
- 使用 C API 更改张量流推理的线程数
- 任何人都解释下面的代码,它的输出是什么?
- TensorFlow C++ 批量推理
- 任何人都可以在带有JNI的Android Studio上帮助我解决此错误,是否缺少一些内容?
- 如何使用张量流的C++加载检查点和推理?
- CAN模板类型推理考虑原始操作类型转换
- 是否有NS-3.29的任何人嵌入aqua-sim-ng
- 调用私有函数并且它有效.请你们中的任何人推理一下