关于wtl的一个实验
2024-09-24 02:10:21
代码如下:
#include <iostream> using namespace std; template<typename T>
class Base {
public:
void SayHi()
{
T* pT = static_cast<T*>(this);
pT->PrintClassName();
} protected:
void PrintClassName()
{
cout << "This is class Base.\n";
}
}; class D1 : public Base<D1>
{ }; class D2 : public Base<D2>
{
public:
void PrintClassName()
{
cout << "This is class D2.\n";
}
}; int main(void)
{
D1 d1;
D2 d2; d1.SayHi();
d2.SayHi(); getchar(); return ;
}
在类D1中,PrintClassName方法从父类Base中继承。
PrintClassName在D1的权限是private ?
那么在实例化Base的时候,Base类调用SayHi时,无法调用D1的private方法PrintClassName的,编译应该出错。
实测中,g++和vc++编译通过,看来微软和开源届的实现是一致的。
同样在D2中,如果PrintClassName声明为protected,则编译时,g++和vc++都无法通过,因为Base实例化时无法访问D2的protected方法。
这样的代码设计思路在wtl中很常见,继续研究……
最新文章
- [转]redis-cluster研究和使用--待研究
- Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序
- AngularJs学习笔记-AngularJS权威教程学习笔记
- Unity3D导出的EXE不用显示分辨率选择界面
- real-time application
- 将mysql服务加入到系统服务中 服务器配置 注销时不会关闭mysql
- 在jsp中用一数组存储了数据库表中某一字段的值,然后在页面中输出其中的值。
- C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用
- cookie跟session自我介绍
- Django之视图
- (转)Java并发编程:线程池的使用
- java笔试总结
- mysql为int类型的字段php取出来之后为何变为string类型?
- springmvc基础知识及注解
- BZOJ4925 城市规划
- redux的bindActionCreators
- windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】
- [转]使用Gradle管理你的Android Studio工程
- js 日期获去及格式化
- web页面的点对点复制粘贴