c++虚函数重写的权限问题
2024-08-21 13:56:27
cbase.h:
#ifndef CBASE_H
#define CBASE_H
#include<iostream>
using std::cout;
using std::endl;
class CBase{
public:
virtual void show();
};
#endif // CBASE_H cbase.cpp:
#include"cbase.h"
void CBase::show()
{
cout<<"CBase"<<endl;
} cderived.h:
#ifndef CDERIVED_H
#define CDERIVED_H
#include"cbase.h"
class CDerived:public CBase{
private:
void show() override;
};
#endif // CDERIVED_H cderived.cpp:
#include"cderived.h"
void CDerived::show()
{
cout<<"CDerived"<<endl;
}
main.cpp:
#include <iostream>
#include"cderived.h"
using namespace std;
int main()
{
CBase* pBase=new CDerived;
pBase->show();
dynamic_cast<CDerived*>(pBase)->show();
delete pBase;
CDerived* pDerived=new CDerived;
pDerived->show();
static_cast<CBase*>(pDerived)->show();
delete pDerived;
return 0
}
程序运行会报错:dynamic_cast<CDerived*>(pBase)->show();pDerived->show();
说是私有的不可调用
可见编译器只看到了他所看到的,要从编译器的角度看问题。只是把指针是什类型就是什么类型。理解(*(p->vptr)[n])(p,...)
最新文章
- 2.Java基础之Runtime对象
- Longest Absolute File Path
- linq 日期分组统计
- IOS竖屏应用单个页面横屏的解决办法
- 每天一个linux命令--more/less
- 29、shiro框架入门
- 将正确的 HTTP 头转发给后端服务器的一些问题
- text输入框中按下enter键时阻止刷新页面
- 【UVA 11383】 Golden Tiger Claw (KM算法副产物)
- 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
- [转载]CentOS6.4+Mono3.0.7+Jexus5.2.5
- squid+stunnel+用户密码认证的三种玩法
- MYSQL5.6数据库ZIP安装以及VS中使用注意事项
- 怎么用MATLAB产生FPGA所需的hamming窗系数
- 附录A application.properties配置项
- connect设置连接超时
- NFV论文集(三)综述
- JavaScript-年月日转换12小时制
- SqlServer日常积累(三)
- mina 通讯框架