面试常问-----------如何实现一个不能被继承的类

一个类不能被继承,就是说它的子类不能构造出父类对象(由于继承就是要达到复用的效果),那么这个子类就无法实例化整个子类,就可以理解成无法继承父类。
方案1:
首先由于我们知道子类继承父类时,访问属性就会改变,private修饰的成员被继承后在子类是不可见的,而子类的构造函数是由子类父类合成而来的,如此就没有办法创建对象,所以我们可以将父类的构造函数声明成私有的,这样一来,这个类的构造函数在子类中是不可见的,那么这个类就不能被继承了。
但是由于将这个类构造函数定义成了私有,那在类外他自己都没有办法构造对象,所以
方案2:
改进方案就是定义一个static的函数,函数的作用就是作为一个接口,返回一个创建的对象可以被类外看到,帮助构造类的实例,还有一种方案就是将这个函数定义成友元函数,友元关系也不可以被继承。
方案3:由于设置static或者友元,类就不能像普通的类一样;所以我们就要用到虚继承了。
让父类虚继承一个G类,那么根据虚继承的特性,虚基类的构造函数由最终子类负责构造,所以B类想要继承A类,就要能构造出G类,这是没办法实现的,所以就实现了一个不能被继承的类。

猜你喜欢

转载自blog.csdn.net/cx2479750196/article/details/80781452