分析:这是Adobe 公司 2007 年校园招聘的最新笔试题。这道题除了考察应聘者的
C++ 基本功底外,还能考察反应能力,是一道很好的题目。
在Java 中定义了关键字 final ,被 final 修饰的类不能被继承。但在 C++ 中没
有final 这个关键字,要实现这个要求还是需要花费一些精力。
首先想到的是在 C++ 中,子类的构造函数会自动调用父类的构造函数。同样,
子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我
们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从
它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。
可是这个类的构造函数和析构函数都是私有函数了,我们怎样才能得到该类
的实例呢?这难不倒我们,我们可以通过定义静态来创建和释放类的实例。
基于这个思路,我们可以写出如下的代码:
//
/
// Define a class which can't be derived from
//
/
class FinalClass1
{
public :
static FinalClass1* GetInstance()
{
return new FinalClass1;
}
static void DeleteInstance( FinalClass1* pInstance)
{
delete pInstanc