您的位置:首页 > 职场人生

一道关于OO面试题

2016-04-11 14:01 465 查看
腾讯每天上班有员工和主管签到。主管有权限查看签到情况,可以获取的信息有:总共有多少人签到,按照员工的id或者签到顺序查看员工的签到情况,得到倒数n个签到的员工。

先写了下面这些,有时间再补充:

#include <iostream>
#include <string>
using namespace std;

#define MAX 100
class Employee;
Employee *allEmployee[MAX];  //所有员工

//class SignOperator;
class Singleton{
public:
friend class Charge;
static Singleton* GetInstance(){
if(instance==NULL)
instance=new Singleton();
return instance;
}
void IncreaseNum(){++signNum;}
void AddSignEmployee(int id)
{
signEmployee[signNum]=allEmployee[signNum];
IncreaseNum();
}
void Delete(){if(instance) delete instance;instance=NULL;}
private:
static int signNum;
Employee *signEmployee[MAX];
Singleton(){}
static Singleton *instance;
int GetNum(){return signNum;}

};

Singleton *Singleton::instance=NULL;
int Singleton::signNum=0;

class Employee{
protected:
int ID;
bool isSign;
string signTime;
Singleton *myInstance;
public:
Employee(int id=0):ID(id){myInstance=Singleton::GetInstance();}
~Employee(){}
void SetID(int id){ID=id;}
void Clear(){isSign=false;signTime="NULL";}
int GetID(){return ID;}
void Sign(string time){isSign=true;signTime=time;myInstance->AddSignEmployee(ID);}
bool IsSign(){return isSign;}
string GetSignTime(){return signTime;}
virtual void GetSignNum(){
cout<<"You have no right to get the message"<<endl;
}
};

class Charge:public Employee{
private:
int ID;
public:
Charge(int id=0):ID(id){}
void GetSignNum(){cout<<"共有 "<<myInstance->GetNum()<<" 人签到"<<endl;}
};

int main()
{
for(int i=0;i<80;i++)
allEmployee[i]=new Employee(i+1);
for(int i=80;i<MAX;i++)
allEmployee[i]=new Charge(i+1);

allEmployee[1]->Sign("08:00");
allEmployee[5]->Sign("08:05");
allEmployee[5]->Sign("07:55");
allEmployee[80]->Sign("08::00");
allEmployee[80]->GetSignNum();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: