final 加強(qiáng)
在我的舊文中,曾經(jīng)提到在 C++ 中實(shí)現(xiàn) Java 的 final 功能,但每次都要寫一個(gè)基類比較麻煩,今次用模板把它加強(qiáng)。
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 };
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>,而不用每次都寫一個(gè)類。
在這里順便說一下,為什么一定要虛繼承,假設(shè)我們有
1 class test : public MyTest{};
如果上面不是虛繼承,那么 final 類的構(gòu)造函數(shù)由 MyTest 的構(gòu)造函數(shù)負(fù)責(zé)調(diào)用,因?yàn)槭怯言悾瑒t調(diào)用成功,無法阻止 test 實(shí)例化。而一旦聲明為虛繼承,MyTest 不再負(fù)責(zé)調(diào)用 final 的構(gòu)造函數(shù),而由 test 來調(diào)用,那么因?yàn)椴皇怯言悾瑢?shí)例化將失敗,編譯出錯(cuò),提示不能訪問私有的構(gòu)造函數(shù)。
posted on 2007-12-17 21:37 cuigang 閱讀(377) 評論(1) 編輯 收藏 引用 所屬分類: C/C++