상속
문서 저장 클래스.의 구현.
예제에 쓰이는 각 코드들.
DocWriter.h
#ifndef DOCWRITER_H
#define DOCWRITER_H
#include <string>
using namespace std; // 스트링 클래스를 사용하기 위한 준비.
class DocWriter
{
public:
DocWriter();
DocWriter(const string& fileName, const string& content);
~DocWriter();
// 파일 이름을 지정
void SetFileName(const string& fileName);
// 저장할 텍스트를 지정
void SetContent(const string& content);
// 파일에 텍스트를 저장시킨다.
void Write();
protected:
string _fileName;
string _content; //두개의 스트링 객체를 멤버로 갖는다. _fileName 은 문서를
}; //저장할 파일의 이름을 보관하며 _content는 문서의 내용을 보관한다.
#endif
DocWriter.cpp
#include "DocWriter.h"
#include <fstream>
using namespace std;
//파일 입출력 작업을 위해서 ofstream 클래스를 사용해야하는데 그를 위한
//인클루드 작업을 해둔다.
DocWriter::DocWriter()
{
// 파일이름과 텍스트를 디폴트로 지정시켜 놓는다.
_fileName = "NoName.txt";
_content = "There is no content.";
}
DocWriter::DocWriter(const string& fileName, const string& content)
{
_fileName = fileName;
_content = content;
}
DocWriter::~DocWriter()
{
}
// 파일 이름을 지정
void DocWriter::SetFileName(const string& fileName)
{
_fileName = fileName;
}
// 저장할 텍스트를 지정
void DocWriter::SetContent(const string& content)
{
_content = content;
}
// 파일에 텍스트를 저장시킨다.
void DocWriter::Write()
{
// 파일을 연다.
ofstream of( _fileName.c_str() );// 하드디스크에 파일을 생성하고 내용을 써 넣을 수 있게 준비한다.
//이 때 _fileName 에 보관된 파일의 이름을 사용하는데 C스타일의 문자열로
//넘겨줄 필요가 있기 때문에 _fileName.c_str()처럼 해준다.
// 간단한 헤더를 출력한다.
of << "# Content #\n\n"; //cout 객체에 문자열을 넘겨주듯이 of 객체에 문자열을
//넘겨주면 파일에 내용이 써진다.
// 텍스트를 있는 그대로 저장한다.
of << _content; //_content 에 보관한 문자열도 파일에 써 준다.
//DocWriter 클래스에서는 _content 객체에 담긴
//문자열을 있는 그대로 파일에 쓴다.
}
Example.cpp
#include "DocWriter.h"
#include <stdio.h>
using namespace std;
int main()
{
DocWriter dw; //우선 DocWriter객체를 생성한다.
// dw.SetFileName( "test.txt" ); //접근자를 사용해 파일의 이름과 문서의 내용을 지정해준다.
// dw.SetContent("You must be a good programmer~!!");
dw.Write(); //그 다음 Write()함수를 사용해서 파일에 쓰도록 명령한다.
system("pause");
return 0;
}
대부분은 생성자와 접근자 관련 코드이며 중요한 코드는 Write()멤버함수 뿐.
Write()멤버함수는 기본값(받아오는 인자가 없는 경우)과 인자를 받을때의 함수가 다르다.
int main()함수에서 두 줄을 주석처리하여 없는 코드로 만들면
기본값이 쓰여진 파일이 생성된다.
해당 코드 첨부파일
==============================================
HTML 문서 저장 클래스
HTML클래스는 DocWriter클래스와 거의 같은 일을하지만
HTML형식으로 파일을 저장한다는 것 과 웹형식인 문서인 만큼 텍스트의 폰트를 지정할 수 있다는 것이 다르다.
HTMLWriter.h
#ifndef HTMLWRITER_H
#define HTMLWRITER_H
#include "docwriter.h"
class HTMLWriter : public DocWriter
{
public:
HTMLWriter();
~HTMLWriter();
// 텍스트를 파일로 저장시킨다.
void Write();
// 폰트를 지정한다.
void SetFont(const string& fontName, int fontSize, const string& fontColor);
protected:
string _fontName;
int _fontSize;
string _fontColor;
};
#endif
HTMLWriter.cpp
#include "htmlwriter.h"
#include <fstream>
using namespace std;
HTMLWriter::HTMLWriter()
{
// 디폴트 파일 이름만 바꾼다.
_fileName = "NoName.html";
// 디폴트 폰트를 지정한다.
_fontName = "굴림";
_fontSize = 3;
_fontColor = "black";
}
HTMLWriter::~HTMLWriter()
{
}
// 파일에 텍스트를 저장시킨다.
void HTMLWriter::Write()
{
// 파일을 연다.
ofstream of( _fileName.c_str() );
// HTML 헤더 부분을 저장한다.
of << "<HTML><HEAD><TITLE>This document was generated by HTMLWriter</TITLE></HEAD><BODY>";
of << "<H1>Content</H1>";
// 폰트 태그를 시작한다.
of << "<Font name='" << _fontName << "' size='" << _fontSize << "' color='" << _fontColor << "'>";
// 텍스트를 저장한다.
of << _content;
// 폰트 태그를 닫는다.
of << "</FONT>";
// HTML을 마무리 한다.
of << "</BODY></HTML>";
}
// 폰트를 지정한다.
void HTMLWriter::SetFont(const string& fontName, int fontSize, const string& fontColor)
{
_fontName = fontName;
_fontSize = fontSize;
_fontColor = fontColor;
}
Example.cpp
#include "htmlwriter.h"
int main()
{
HTMLWriter hw;
hw.SetFileName( "test.html" );
hw.SetContent("You must be a good programmer~!!");
hw.SetFont("Arial", 16, "blue"); //웹 문서에 사용할 퐅느를 지정한다
hw.Write(); //HTMLWriter클래스에 새로 추가한 접근자다.
return 0;
}
해당 주석이 달린 파일 업로드.
본 글에는 참조에 쓰인 DocWriter.h와 .cpp가 없음.[전 글에 있던 파일 그대로의 내용이라 안적혀있는 듯.]
Example.cpp 의 내용을 좀 수정하여 다음과 같이 바꾸면
#include "htmlwriter.h"
#include <iostream>
using namespace std;
int main()
{
HTMLWriter hw;
hw.SetFileName( "test.html" );
hw.SetContent("You must be a good programmer~!!");
hw.SetFont("Arial", 16, "blue"); //웹 문서에 사용할 퐅느를 지정한다
hw.Write(); //HTMLWriter클래스에 새로 추가한 접근자다.
cout << "DocWriter 의 사이즈 : ";
cout << sizeof( DocWriter ) ;
cout << "\n";
cout << "HTMLWriter 의 사이즈 : ";
cout << sizeof( HTMLWriter ) ;
cout << "\n";
system("pause");
return 0;
}
이런식으로 sizeof 를 사용하여 클래스의 크기를 출력하면.. 이렇게 나온다.
상속을 받으면 모든 멤버를 상속받기 때문에 그 용량이 커짐을 알 수 있다.
**공부에 도움이 되었다면 손가락 버튼을 클릭해주심 좋겠습니다.**