C++中不可继承的类
如何让C++中的类变得不可继承呢?最笨的办法就是人为约定喽~呵呵~再仔细想一想可能会想到如下用法:
class A { private: A(){} public: static A * Create(); };
这有点像singleton的使用方法,但是这种模式用在不可继承的类上面就显得有点不伦不类了。我甚至还见有人用template来实现这个,真是鸡肋鸡肋。。。下面介绍两种方法,个人觉得还是比较漂亮的~(以下代码就懒的讲解了,大家自己看吧)
class COrphanTag { protected: COrphanTag(){} }; class COnly : private virtual COrphanTag { public: COnly(){} }; class CMore : public COnly { public: CMore(){} }; int main(void) { COnly only; return 0; }
但是这个程序在VC6下是可以正常编译通过的,哎,没办法,必须顺着微软来啊,那我们再改改:
class COnly; class COrphanTag { private: COrphanTag(){} friend class COnly; }; class COnly : private virtual COrphanTag { public: COnly(){} }; class CMore : public COnly { public: CMore(){} }; int main(void) { COnly only; return 0; }
嗯,这样就可以了,大家都能成功的报错了吧~但是如果有人使用如下的多继承那就无语了:
class CMore : public COnly, public virtual COrphanTag { public: CMore(){} };
毕竟C++没有JAVA中final那种东西啊。。。