CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

final 加强


 
在我的旧文中,曾经提到在 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 阅读(347) 评论(1)  编辑 收藏 引用 所属分类: C/C++

评论

# re: final 加强  回复  更多评论   

顶一下
2007-12-18 14:50 | 秦歌

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理