第五十九题(用C++设计一个不能被继承的类)

来源:互联网 发布:java writer append 编辑:程序博客网 时间:2024/05/22 14:51
题目:用C++设计一个不能被继承的类。
分析:这是Adobe 公司2007 年校园招聘的最新笔试题。

这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。


分析:C++中父类的构造函数会调用子类的构造函数,从这一点出发, 我们可以将子类的构造函数权限设为私有,这样父类构造函数在调用子类构造函数时就会出错。但是这样做有一个副作用,私有的构造函数使得我们无法正常创造这个类的对象。虽然可以通过像单例模式中那样通过提供一个静态函数调用私有构造函数产生一个类对象并返回其指针或者引用,但这样只能产生堆上的对象而无法在栈上产生类的局部对象。

这里采用这样一种实现方法:


使用一个具有私有构造函数的模板类FinalClassBase,FinalClass虚继承于该类,并且为该类的友元,因此FinalClass有权限调用基类的构造函数。这里FinalClass虚继承于FinalClassBase,所以以后所有试图继承FinalClass的派生类,必须在他们的构造函数里直接调用虚基类FinalClassBase的构造函数,此时就会因为没有相应的访问权限而出错(图中提示不可访问),从而限制了FinalClass为一个不能被继承的类,满足了题目的要求。



0 0
原创粉丝点击