一般构建不能被继承的c++类,都是构建虚拟继承的类,然后不能继承的类去虚拟继承这个类,这样就可以了,比如
1 #include<iostream> 2 using namespace std; 3 4 template <typename T> 5 class Base 6 { 7 friend T; 8 private: 9 Base() {} 10 ~Base() {} 11 }; 12 13 class Finalclass : virtual public Base<Finalclass> 14 { 15 public: 16 Finalclass() {} 17 ~Finalclass() {} 18 };
这样 Finalclass就是不在可以被继承的了。
下面我使用c++11之后新的语法支持
class Finalclass
{
public:
virtual ~Finalclass() final
{
}
};
利用编译器需要产生析构函数,把FinalClass的析构函数变成虚的,并且给出final标记,这样编译的时候就无法通过了。从而达到不能被继承。