一道关于OO面试题

来源:互联网 发布:2017年淘宝双12新玩法 编辑:程序博客网 时间:2024/06/06 05:24

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

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

#include <iostream>#include <string>using namespace std;#define MAX 100class 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;}


0 0
原创粉丝点击