#include "StdAfx.h"
#include <SSTREAM>
#include<iostream>
#include<fstream>
#include<malloc.h>
#include <windows.h>
#include <list>
using namespace std;
class Employee
{
public:
string m_Name;
DWORD m_Salary;
virtual void Add(Employee* pObj)=0;
virtual void Remove(Employee* pObj)=0;
virtual void GetSalary(int nDepth)=0;
protected:
private:
};
class Leader:public Employee
{
public:
Leader(string name,DWORD salary)
{
m_Name=name;
m_Salary=salary;
}
virtual void Add(Employee* pObj)
{
m_Staff.push_back(pObj);
}
virtual void Remove(Employee* pObj)
{
for (list<Employee*>::iterator pBegin=m_Staff.begin();
pBegin!=m_Staff.end();pBegin++)
{
if ((*pBegin)==pObj)
{
m_Staff.erase(pBegin);
break;
}
}
}
virtual void GetSalary(int nDepth)
{
//获取工资
int Temp=nDepth;
while (Temp>1)
{
printf(" ");
Temp--;
}
printf("%s,%d\n",m_Name.c_str(),m_Salary);
for (list<Employee*>::iterator pBegin=m_Staff.begin();
pBegin!=m_Staff.end();pBegin++)
{
(*pBegin)->GetSalary(nDepth+1);
}
}
protected:
private:
list<Employee*> m_Staff;
};
class NormalEmployee:public Employee
{
public:
NormalEmployee(string name,DWORD salary)
{
m_Name=name;
m_Salary=salary;
}
virtual void Add(Employee* pObj)
{
printf("普通员工不能添加\n");
}
virtual void Remove(Employee* pObj)
{
printf("普通员工没有删除\n");
}
virtual void GetSalary(int nDepth)
{
while (nDepth>1)
{
printf(" ");
nDepth--;
}
printf("%s,%d\n",m_Name.c_str(),m_Salary);
}
protected:
private:
};
int main(void)
{
Employee* pRoot=new Leader("总监",10000000);
Employee* pManager=new Leader("经理",1000000);
Employee* p1=new NormalEmployee("员工一",100000);
Employee* p2=new NormalEmployee("员工二",200000);
pManager->Add(p1);
pManager->Add(p2);
pRoot->Add(pManager);
Employee* pTeamLeader=new Leader("组长",300000);
pRoot->Add(pTeamLeader);
pRoot->GetSalary(1);
return 0;
}
C++设计模式之组合模式(Composite)
最新推荐文章于 2023-12-27 11:12:26 发布