#include<iostream>
#include<map>
using namespace std;
class Command{
public:
virtual void Invoke(int*,int)=0;
};
class CmdPlus :public Command{
CmdPlus(){};
void Invoke(int* agNum1,int agNum2){
*agNum1+=agNum2;
}
friend class CmdManager;
};
class CmdMinus:public Command{
CmdMinus(){}
void Invoke(int* agNum1,int agNum2){
*agNum1-=agNum2;
}
friend class CmdManager;
};
class CmdManager{
static CmdManager* cm;
int mAnswer;
map<char, Command*> mArrayofCmd;
void lnit(){
mAnswer=0;
AddCmd();
}
void AddCmd(){
mArrayofCmd['+']=new CmdPlus();
mArrayofCmd['-']=new CmdMinus();
}
public:
static CmdManager * getInstance(){
if(cm==NULL){
CmdManager* instanceOfCM=new CmdManager();
instanceOfCM->lnit();
return instanceOfCM;
}
return cm;
}
static void destroyInstance(){
if(cm!=NULL){
delete cm;
}
}
void Invoke(int agNum,char agOperator){
mArrayofCmd[agOperator]->Invoke(&mAnswer,agNum);
}
int getAnswer(){
return mAnswer;
}
};
CmdManager* CmdManager::cm=NULL;
int main(){
CmdManager* cm=CmdManager::getInstance();
cm->Invoke(5,'+');
cm->Invoke(3,'+');
cm->Invoke(2,'-');
cout<<"Answer = "<<cm->getAnswer()<<endl;
CmdManager::destroyInstance();
}
---------------------------------------------------------------------
순수가상함수 Invoke를 재정의하여 각 클래스에 맞게 연산하도록 하였다.
CmdManager클래스를 이용해 각각의 연산을 분류해서 호출하고 각 연산의 값을 누적시켰다.
댓글 0
| 번호 | 제목 | 글쓴이 | 최근 수정일 | 조회 수 |
|---|---|---|---|---|
| 공지 | 안내사항 | 관리자 | 2019.12.21 | 162 |
| 105 | rewind() 함수의 사용에 관하여 | 관리자 | 2024.03.13 | 107 |
| 104 | 일반화 함수의 사용3 | 관리자 | 2019.03.01 | 162 |
| 103 | 일반화 함수의 사용2 | 관리자 | 2019.02.28 | 162 |
| 102 | 일반화 함수 사용 | 관리자 | 2019.02.28 | 166 |
| » | 순수가상함수 사용 계산기 | 관리자 | 2019.02.27 | 214 |
| 100 | 순수가상함수 사용한 여러 도형의 넓이 구하기 | 관리자 | 2019.02.27 | 199 |
| 99 | 순수 가상함수 | 관리자 | 2019.02.27 | 163 |
| 98 | 가상소멸자 | 관리자 | 2019.02.27 | 149 |
| 97 | 가상함수 사용3 | 관리자 | 2019.02.27 | 155 |
| 96 | 가상함수의 사용2 | 관리자 | 2019.02.26 | 168 |
| 95 | 가상함수 사용1 | 관리자 | 2019.02.26 | 156 |
| 94 | 사각형정보 입력받아 파일에 출력하기 | 관리자 | 2019.02.26 | 220 |
| 93 | 파일 복사 | 관리자 | 2019.02.26 | 161 |
| 92 | 파일 출력 | 관리자 | 2019.02.26 | 154 |
| 91 | 조작자 생성2 | 관리자 | 2019.02.26 | 152 |
| 90 | 조작자 생성1 | 관리자 | 2019.02.25 | 154 |
| 89 | 입출력연산자 중복 | 관리자 | 2019.02.25 | 152 |
| 88 | 일반 출력설정 | 관리자 | 2019.02.25 | 154 |
| 87 | 조작자를 통한 출력 설정 | 관리자 | 2019.02.25 | 167 |
| 86 | 연산자 중복 - 차집합구하기 | 관리자 | 2019.02.25 | 281 |
| 85 | 연산자 중복-교집합과 합집합 구하기 | 관리자 | 2019.02.25 | 198 |
| 84 | 연산자 중복-스트림연산자 | 관리자 | 2019.02.21 | 161 |
| 83 | 연산자 중복-치환연산자 | 관리자 | 2019.02.20 | 294 |
| 82 | 연산자 중복-friend함수 사용 | 관리자 | 2019.02.20 | 159 |
| 81 | 연산자 중복-단항연산자 | 관리자 | 2019.02.20 | 209 |
| 80 | 연산자 중복-관계연산자 | 관리자 | 2019.02.20 | 153 |
| 79 | 연산자 중복-이항연산자 | 관리자 | 2019.02.20 | 178 |
| 78 | 함수 중복 이용한 숫자 차 계산 | 관리자 | 2019.02.19 | 164 |
| 77 | 함수 포인터와 함수 중복 | 관리자 | 2019.02.19 | 204 |