문자열 class는 프로그래밍에서 가장 중요한 것들 중 하나이고, 문자열 조정을 위해 매우 많이 쓰인다. 문자열 class는 여러가지가 있고, 물론 이들을 상속받음으로써 자신만의 문자열 class를 만들 수도 있다.
이 문서에 쓰여진 문자열 클래스는 23절를 보아라.
표준 C++ 라이브러리 string class (ANSI/ISO string class http://www.msoe.edu/eecs/cese/resources/stl/string.htm 와 http://www.sgi.com/tech/stl/basic_string.html
Qt의 외부 라이브러리에 있는 Qt String class http://doc.trolltech.com/qstring.html , mirror : http://www.cs.berkeley.edu/~dmartin/qt/qstring.html
이들 중 맘에 드는 것이 없다면, 자신만의 문자열 클래스를 만들 수도 있다. 위에 언급된 하나 혹은 여러 class를 상속받아 만들 수도 있다.
위에 말한 것 같이, 하나 혹은 여러 class를 상속받아 자신만의 문자열 class를 만들 수도 있다. 여기서는 표준 C++ 라이브러리의 string class와 부록 A의 String class 를 상속받음으로써 다중상속을 이용한 문자열 class를 만들어 볼 것이다.
우선 예제 파일 'string_multi.h'를 23절 에서 다운로드 받아라.
이 파일은 다음과 같다 :
// ****************************************************************** // String class와 표준 라이브러리의 "string" class를 상속받음으로써 // 직접 문자열 class를 만들어보는 예시를 위한 프로그램 // ****************************************************************** #ifndef __STRING_MULTI_H_ALDEV_ #define __STRING_MULTI_H_ALDEV_ #include <string> #include "String.h" #include "StringBuffer.h" #ifdef NOT_MSWINDOWS #else using namespace std; // MS Visual C++ compiler Version 6.0 에서 필요함. #endif // 중요! : C++에서는 생성자, 파괴자, 복사 연산자가 같이 상속되지 않는다. // 따라서 만약 =, + 등의 연산자가 base class에 정의되어 있고, base // class의 생성자를 이용한다면, 반드시 같은 역할을 하는 생성자를 // 상속받는 class에도 만들어주어야 한다. // 아래에 주어진 mystring(), mystring(char [])를 보아라. // // 또한 atmpstr이 mystring으로 선언되었다고 할 때, atmpstr + mstr // 과 같이 연산자를 쓸 때, 실제로 불리는 것은 atmpstr.operator+(mstr)이다. class mystring:public String, string { public: mystring():String() {} // =, + 연산자를 위해 필요하다 mystring(char bb[]):String(bb) {} // =, + 연산자를 위해 필요하다 mystring(char bb[], int start, int slength):String(bb, start, slength) {} mystring(int bb):String(bb) {} // + 연산자를 위해 필요하다 mystring(unsigned long bb):String(bb) {} // + 연산자를 위해 필요하다 mystring(long bb):String(bb) {} // + 연산자를 위해 필요하다 mystring(float bb):String(bb) {} // + 연산자를 위해 필요하다 mystring(double bb):String(bb) {} // + 연산자를 위해 필요하다 mystring(const String & rhs):String(rhs) {} // + 연산자를 위해 필요한 Copy Constructor mystring(StringBuffer sb):String(sb) {} // Java와의 호환을 위해 mystring(int bb, bool dummy):String(bb, dummy) {} // StringBuffer class를 위해 int mystraa; // mystring의 최적화 private: int mystrbb; // mystring의 최적화 }; #endif // __STRING_MULTI_H_ALDEV_ |