本文主要是介绍第五十九题(用C++设计一个不能被继承的类),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:用C++设计一个不能被继承的类。分析:这是Adobe 公司2007 年校园招聘的最新笔试题。
这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。
分析:C++中父类的构造函数会调用子类的构造函数,从这一点出发, 我们可以将子类的构造函数权限设为私有,这样父类构造函数在调用子类构造函数时就会出错。但是这样做有一个副作用,私有的构造函数使得我们无法正常创造这个类的对象。虽然可以通过像单例模式中那样通过提供一个静态函数调用私有构造函数产生一个类对象并返回其指针或者引用,但这样只能产生堆上的对象而无法在栈上产生类的局部对象。
这里采用这样一种实现方法:
使用一个具有私有构造函数的模板类FinalClassBase,FinalClass虚继承于该类,并且为该类的友元,因此FinalClass有权限调用基类的构造函数。这里FinalClass虚继承于FinalClassBase,所以以后所有试图继承FinalClass的派生类,必须在他们的构造函数里直接调用虚基类FinalClassBase的构造函数,此时就会因为没有相应的访问权限而出错(图中提示不可访问),从而限制了FinalClass为一个不能被继承的类,满足了题目的要求。
这篇关于第五十九题(用C++设计一个不能被继承的类)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!