(define (cuigang) (coding))

(define (coding) (coding))

C++博客 首页 新随笔 联系 聚合 管理
  55 Posts :: 31 Stories :: 69 Comments :: 0 Trackbacks

 
在我的旧文中,曾经提到在 C++ 中实现 Java 的 final 功能,但每次都要写一个基类比较麻烦,今次用模板把它加强。
 
 1 template<class T>
 2 class final{
 3         friend T;
 4 private:
 5         final(){};
 6 };
 7 
 8 class MyTest : public virtual final<MyTest>{
 9 public:
10         MyTest(){};
11 };

 
这样以后就可以直接继承模板类 final<T>,而不用每次都写一个类。
 
在这里顺便说一下,为什么一定要虚继承,假设我们有
 
1 class test : public MyTest{};

 
如果上面不是虚继承,那么 final 类的构造函数由 MyTest 的构造函数负责调用,因为是友元类,则调用成功,无法阻止 test 实例化。而一旦声明为虚继承,MyTest 不再负责调用 final 的构造函数,而由 test 来调用,那么因为不是友元类,实例化将失败,编译出错,提示不能访问私有的构造函数。
 
posted on 2007-12-17 21:37 cuigang 阅读(38) 评论(1)  编辑 收藏 引用 所属分类: C/C++

评论

# re: final 加强 2007-12-18 14:50 秦歌
顶一下  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]