如何实现一个不能被继承的类
我们有两种方式:
- 第一种:类似于单例模式的处理,将类的构造函数或者析构函数写到private下,则派生类则无法继承后实例化,但是这个类也将无法在类外实例化。
- 第二种:类似普通类相同的处理,利用虚继承和友元,虚继承的特点是派生类实例化的时候,会跳过这个继承的类,直接去调用这个类虚继承的类的构造函数。
我们给出代码和运行结果:
第一种代码:
第二种代码:
我们可以发现,由于类A虚继承于类Base,当B继承A后进行实例化的时候,调用类B的构造函数的时候,会跳过类A而直接调用类Base的构造函数,但是非常遗憾的是,类B并不是类Base的友元类,因此不能调用类Base的私有构造函数。