科大讯飞2013笔试题:编写一个类,要求该类不能被继承,且只能实例化三次。

C/C++

在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。
首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。

class FinalClass1
{
public static int count ;//实例化次数
public :
static FinalClass1* GetInstance()
{
if(count<=0)
return NULL;
count--;
return new FinalClass1;
}
static void setCount(int n)
{
count = n;
}
static void DeleteInstance( FinalClass1* pInstance)
{
delete pInstance;
pInstance = 0;
}

private :
FinalClass1() {}
~FinalClass1() {}
};

//////////////////////测试函数////////////////////////////////////////////////////////////
#include<stdio.h>
int FinalClass1::count=0;
void main()
{
FinalClass1::setCount(3);
FinalClass1 *f1 = FinalClass1::GetInstance();
FinalClass1 *f2 = FinalClass1::GetInstance();
FinalClass1 *f3 = FinalClass1::GetInstance();
if (f3==NULL)
{
printf("f3 NULL\n");
}else{
printf("f3 Not NULL\n");

}

FinalClass1 *f4 = FinalClass1::GetInstance();
if (f4==NULL)
{
printf("f4 NULL\n");
}
FinalClass1 *f5 = FinalClass1::GetInstance();
if (f5==NULL)
{
printf("f5 NULL\n");
}
}

请问你是在合肥上学吗?我前些日子刚参加科大讯飞的笔试,笔试通过了面试的时候面试官一看到我本科是二本就不问问题就打发我走了,非常鄙视科大讯飞的面试官!我承认我本科是不好,但我通过努力考上了211高校的研究生至少也证明我有上进心。即使你鄙视我的本科学校但也不能一个问题都不问就打发我走,这严重不尊重我的努力和我的自尊心!要是科大讯飞都是以这样的人才策略招人,我看它也走不了多长的路。哎,不说这些气话了,只能靠努力让自己变得更加强大才能不被他们鄙视了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-03
不能被继承的话.只要用final声明就可以了.
只能实例化三次的话.就把构造器给私有化,然后声明一个list长度为3.每次get只能获取一个..最后就三个.
大概是下面这样子 只能new三次.但是可以使用之前的对象
import java.util.ArrayList;
import java.util.List;
public final class Test {
private static List<Test> objs = null;
private static int count = 0;
private Test() {
}
public static Test getTestObj(){
if(count==0){
objs = new ArrayList<Test>(3);
}
if(count<3){
Test obj = new Test();
objs.add(obj);
count++;
return obj;
}else{
return objs.get(0);
}
}
public static void main(String[] args) {
System.out.println(Test.getTestObj());
System.out.println(Test.getTestObj());
System.out.println(Test.getTestObj());
System.out.println(Test.getTestObj());
System.out.println(Test.getTestObj());
System.out.println(Test.getTestObj());
}
}
第2个回答  2012-10-04
啊,我就当做是笔试题目吧;;;;
Class OK
{

private:OK();//构造函数无法extends
public:~OK();
OK*ok;
static int num=0;//实例化次数
OK* GetNewOk()
{if(num++>3) return NULL;
if(ok==NULL)
ok=new OK();
return ok;
}

}
第4个回答  2012-10-06
public final class function{
int a;
priavate int b=3;
private function();
private List fun=new ArrayList(b);
private void newfun(){
for(int i=0;i<b;i++){
fun[i]=new function();
}
}
public function getInstance(){
Random ran=new Random();
int num=ran.nextInt(b);
return fun[num];
}
}
相似回答