我们从最简单的开始: 首先,大家都知道要阻止类被实例化,可以通过使用private or protected 关键字来声明默认构造函数。那么在阻止类被继承的时候,我们需要用到这个技巧。其次,阻止类被继承还需要使用private来控制继承的基类。 namespace SamplePrivate
我们从最简单的开始: 首先,大家都知道要阻止类被实例化,可以通过使用private or protected 关键字来声明默认构造函数。那么在阻止类被继承的时候,我们需要用到这个技巧。其次,阻止类被继承还需要使用private来控制继承的基类。
这样我们就可以实例化SampleSealedClass,并且还不用担心被继承了。不过还是要解释一下为什么阻止了继承? 当我们写出下面的代码时,编译器在编译过程中做了什么呢?
首先,当你在实例化subclass的时候,会先调用SampleSealedClass的构造函数,而在这之前会调用Sealed类的默认构造函数,但是我们发现Sealed是不能被实例化的,并且通过private virtual的继承只能被SampleSealedClass调用,因此这很好的阻止了类被继承。但是这里我们只能完成一个类被不被继承,那么是否有更好的方法来实现阻止任意类被继承呢? 那就需要用到模板了:
这里的TypeWapper主要是将外部类型传递到SealedClasses的,从而能得到访问Sealed构造函数的能力。不过这段代码在GCC4.0中通过编译,而在vs2008中不能通过。可以向下面这样来引用:
将想法付诸于实践,借此来影响他人是一个人存在的真正价值 |
2022-05-13
2022-03-10
2021-07-02
2021-08-14
2021-05-17