一道关于OO面试题

腾讯每天上班有员工和主管签到。主管有权限查看签到情况,可以获取的信息有:总共有多少人签到,按照员工的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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值