代码如下:

#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中很常见,继续研究……

最新文章

  1. [转]redis-cluster研究和使用--待研究
  2. Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序
  3. AngularJs学习笔记-AngularJS权威教程学习笔记
  4. Unity3D导出的EXE不用显示分辨率选择界面
  5. real-time application
  6. 将mysql服务加入到系统服务中 服务器配置 注销时不会关闭mysql
  7. 在jsp中用一数组存储了数据库表中某一字段的值,然后在页面中输出其中的值。
  8. C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用
  9. cookie跟session自我介绍
  10. Django之视图
  11. (转)Java并发编程:线程池的使用
  12. java笔试总结
  13. mysql为int类型的字段php取出来之后为何变为string类型?
  14. springmvc基础知识及注解
  15. BZOJ4925 城市规划
  16. redux的bindActionCreators
  17. windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】
  18. [转]使用Gradle管理你的Android Studio工程
  19. js 日期获去及格式化
  20. web页面的点对点复制粘贴

热门文章

  1. winform 播放声音方式 分类: WinForm 2014-07-25 14:16 194人阅读 评论(0) 收藏
  2. 清理yum源
  3. linux 管道--转
  4. Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用
  5. [转]Android NDK几点回调方式
  6. switch-case参数类型
  7. Android(java)学习笔记201:网络图片浏览器的实现(ANR)
  8. 关于text-align无法居中的问题
  9. dev checkedlistbox动态绑定数据
  10. web前端开发浏览器兼容性 - 持续更新