오후
-상속- p.639
◎문서저장 클래스◎
문서저장 클래스의 구현
(예제22-3)
//doc.h
#ifndef DOCWRITE_H
#define DOCWRITE_H
#include <string>
using namespace std;
class doc
{
public:
doc();
doc(const string& filename, const string& content);
~doc();
//파일이름 지정
void setfilename (const string& filename);
//저장할 텍스트를 지정
void setcontent (const string& content);
//파일에 텍스트를 저장시킨다
void write();
protected:
string _filename;
string _content;
};
#endif
//-------------------------------------------------------
//doc.cpp
#include "doc.h"
#include <fstream>
using namespace std;
doc::doc()
{
//파일이름과 텍스트를 디폴트로 지정시켜 놓는다.
_filename = "Noname.txt";
_content = "there is no content.";
}
doc::doc(const string &filename, const string &content)
{
_filename = filename;
_content = content;
}
//파일이름 지정
void doc::setfilename(const string &filename)
{
_filename = filename;
}
//저정할 텍스트를 지정
void doc::setcontent(const string &content)
{
_content = content;
}
//파일에 텍스트를 저장 시킨다.
void doc::write()
{
//파일을 연다
ofstream of ( _filename.c_str());
//간단한 헤더를 출력한다
of << "# content #\n\n";
//텍스트를 있는 그대로 저장한다
of << _content;
}
//------------------------------------------------
//example.cpp
int main()
{
doc dw;
dw.setfilename ( "test.txt" );
dw.seetcontent ("you must be a good programmer~!!");
dw.write();
결과
텍스트 파일로 저장이 된다.
HTML 문서저장 클래스
위의 doc클래스를 상속받아 html로 형식으로 파일을 저장할수 있는 형태로 만들어 본다.
(예제 22-4)
doc::doc(const string &filename, const string &content)
{
_filename = filename;
_content = content;
}
//파일이름 지정
void doc::setfilename(const string &filename)
{
_filename = filename;
}
//저정할 텍스트를 지정
void doc::seetcontent(const string &content)
{
_content = content;
}
//파일에 텍스트를 저장 시킨다.
void doc::write()
{
//파일을 연다
ofstream of ( _filename.c_str());
//간단한 헤더를 출력한다
of << "# content #\n\n";
//텍스트를 있는 그대로 저장한다
of << _content;
}
----------------------------------------------------------
//example.cpp
int main()
{
htmw hw;
hw.setfilename( " test.html" );
hw.setcontent(" 니가 대장이다 ~! ");
hw.setfont("arial", 16, "blue");
hw.write();
return 0;
}
(위의 (예제22-3)에 있는 doc.h 파일을 같이 추가해서 컴파일해야 정상적으로 작동한다.
결과
THML형식으로 저장되어 출력을 한것이다.
예제에 클래스를 상속받는 문법은 이것이 전부이다.
class htm:
public doc <---- doc클래스를 상속받는다.
{
};
일반적으로 자식클래스에는 부모클래스에 없는 새로운 멤버를 추가 할수 있고 부모클래스에 이미 존재하는 멤버함수를 새롭게
정의할수도 있다.
부모클래스의 생성자 지정하기
(예제22-5)
#ifndef HTMW_H
#define HTMW_H
class htmw : public doc
{
public:
htmw();
htmw(const string& filename, const string& content);
~htmw();
//텍스트를 파일로 저장
void write();
//폰트를 지정
void setfont (const string& fontname, int fontsize, const string& fontcolor);
protected:
string _fontname;
int _fontsize;
string _fontcolor;
};
#endif
------------------------------------------------------------------
//htmw.cpp
#include "htmw.h"
#include <fstream>
using namespace std;
htmw::htmw(const string& filename, const string& content)
: doc( filename, content)
{
_fontname = "굴림";
_fontsize = 3;
_fontcolor = "black";
}
htmw::htmw()
{
//디폴트 파일 이름만 바꾼다
_filename = "noname.html";
//디폴트 폰트를 지정
_fontname = "굴림";
_fontsize = 12;
_fontcolor = "green";
}
htmw::~htmw()
{
}
//파일에 텍스트를 저장 시킨다
void htmw::write()
{
//파일 이름을 연다.
ofstream of( _filename.c_str());
//헤더부분을 저장 한다.
of << "<HTML><HEAD><TITLE>이거 앙? 내가 한거여!</TITLE></HEAD></BODY>";
of << "<marquee><H5>content<H5>";
//폰트태그를 시작
of << " <font name = ' " << _fontname << "' size = '" << _fontsize << "' color = '" << _fontcolor <<"'>";
//텍스트를 저장 한다
of << _content;
//마무리
of << "</BODY></HTML>";
}
//폰트를 지정한다.
void htmw::setfont(const string& fontname, int fontsize, const string& fontcolor)
{
_fontname = fontname;
_fontsize = fontsize;
_fontcolor = fontcolor;
}
----------------------------------------------------------------------------
//example.cpp
#include "htmw.h"
int main()
{
htmw hw( " test.html", " 대원아 혜리 연예인 시키자 ");
hw.write();
결과
역시HTML로 생성이된다.
htmw.cpp 예제소스를 보면 초기화 리스트를 사용해서 부모클래스의 생성자를 호출 한다.
멤버인 객체를 초기화 할때는 객체의 이름을 사용했지만 부모클래스를 초기화 할때 클래스의 이름을
사용한다.