[C++ 소스] 직접 연관(DIRECTED ASSOCIATION) 관계, 회사와 직원
"회사는 직원의 집합체이며 회사는 직원에게 명령을 내릴 수 있다."
회사와 직원은 집합 관계이면서 직접 연관 관계이다.
//Worker.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Worker
{
string name;
public:
Worker(string name);
void Work();
string GetName()const;
};
//Worker.cpp
#include "Worker.h"
Worker::Worker(string name)
{
this->name = name;
}
void Worker::Work()
{
cout<<name<<" 일하다."<<endl;
}
string Worker::GetName()const
{
return name;
}
//Company.h
#pragma once
#include "Worker.h"
class Company
{
Worker **workers;
size_t capacity;
size_t count;
size_t last_wi;//가장 최근에 일한 사원의 인덱스
public:
Company(size_t capacity);
~Company(void);
bool InWorker(Worker *worker);
void DoProject(size_t size);
void List()const;
size_t GetCount()const;
Worker *&operator[](size_t index);
};
//Company.cpp
#include "Company.h"
Company::Company(size_t capacity):capacity(capacity)
{
workers = new Worker *[capacity];
count = 0;
last_wi=-1;
}
Company::~Company(void)
{
delete[] workers;
}
bool Company::InWorker(Worker *worker)
{
if(count>=capacity){ return false; }
workers[count] = worker;
count++;
return true;
}
void Company::DoProject(size_t size)
{
cout<<"== 프로젝트 수행 =="<<endl;
for(size_t i=0; i<size; i++)
{
last_wi= (last_wi+1)%count;
workers[last_wi]->Work();
}
}
void Company::List()const
{
cout<<"=== 직원 목록 ==="<<endl;
for(size_t i=0;i<count;i++)
{
cout<<workers[i]->GetName()<<" ";
}
cout<<endl;
}
size_t Company::GetCount()const
{
return count;
}
Worker *&Company::operator[](size_t index)
{
if((index<0)||(index>=count))
{
throw "유효하지 않은 인덱스입니다.";
}
return workers[index];
}
//Program.cpp
#include "Company.h"
int main()
{
Company *company = new Company(10);
company->InWorker(new Worker("홍길동"));
company->InWorker(new Worker("강감찬"));
company->InWorker(new Worker("을지문덕"));
company->InWorker(new Worker("한석봉"));
company->List();
company->DoProject(2);
company->DoProject(7);
size_t count = company->GetCount();
for(size_t i=0; i<count;++i)
{
delete (*company)[i];
}
delete company;
return 0;
}
실행 결과
=== 직원 목록 ===
홍길동 강감찬 을지문덕 한석봉
== 프로젝트 수행 ==
홍길동 일하다.
강감찬 일하다.
== 프로젝트 수행 ==
을지문덕 일하다.
한석봉 일하다.
홍길동 일하다.
강감찬 일하다.
을지문덕 일하다.
한석봉 일하다.
홍길동 일하다.
본문
[디딤돌 C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계
'C++ > 디딤돌 C++' 카테고리의 다른 글
[C++ 소스] 의존(DEPENDENCY) 관계, 공장과 상품 (0) | 2016.12.18 |
---|---|
[C++ 소스] 연관(ASSOCIATION) 관계, 의사와 약사 (0) | 2016.12.18 |
[C++ 소스] 구성 관계(Composition Relation), 사람과 눈 (0) | 2016.12.18 |
[C++ 소스] 집합 관계(Aggregation Relation), 필통과 연필 (0) | 2016.12.18 |
[C++ 소스] 동적 배열(템플릿 클래스) (0) | 2016.12.17 |