/************************************************************************/
/* 윈도우 운영체제에서 문서 파일을 실행시킬때
문서 파일 이름의 확장자에 따라 적절한 응용프로그램이 실행됨
응용프로그램은 문서 파일을 열어 그 내용을 화면 상에 보여줌
Ex: 파일이름의 확장자가 hwp 이면 한글이 실행
doc 이면 ms word 가 , zip 이면 알집같은 압축프로그램이 실행됨
이러한 동작과정을 객체지향 관점에서 보면 두가지 종류의 객체가 생성되어야 함을 알수있음
그 하나가 응용프로그램객체이고, 다른 하나는 더블 클릭된 문서 파일에 대한 객체이다.
*/
/************************************************************************/
#include <iostream>
#include <fstream>
#include <string> //
#include <map>
using namespace std;
class Document {
public :
virtual bool Open(char* pFileName) = 0;
};
class HwpDocument : public Document {
public :
bool Open(char* pFileName) {
ifstream ifs(pFileName);
if (!ifs)
return false;
// -- HWP 고유 프로세싱
return true;
}
};
class MsWordDocument : public Document {
public :
bool Open(char* pFileName) {
ifstream ifs(pFileName);
if (!ifs)
return false;
// -- MS-Word 고유 프로세싱
return true;
}
};
class Application {
public :
void NewDocument(char* pFileName) {
Document *pDoc = CreateDocument();
docs_[pFileName] = pDoc;
pDoc->Open(pFileName);
}
virtual Document* CreateDocument() = 0;
private :
map<string, Document *> docs_;
};
class HwpApplication : public Application {
public :
Document* CreateDocument() {
return new HwpDocument;
}
};
class MsWordApplication : public Application {
public :
Document* CreateDocument() {
return new MsWordDocument;
}
};
void main()
{
HwpApplication hwp;
hwp.NewDocument("input.hwp");
}
/*******
NewDocument() 함수는 Application 클래스에서만 정의 됨
다른 클래스에서는 더이상 정의 되지않는다.
반면 CreateDocument() 멤버 함수는 Application 클래스에서는 완전 가상 함수 로 정의 하였지만
그 하위의 HwpApplication 및 MsWordApplication 클래스에서는 이를 실제로 구현함
*/