Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
여러가지 문자열관련 class

3. 여러가지 문자열관련 class

문자열 class는 프로그래밍에서 가장 중요한 것들 중 하나이고, 문자열 조정을 위해 매우 많이 쓰인다. 문자열 class는 여러가지가 있고, 물론 이들을 상속받음으로써 자신만의 문자열 class를 만들 수도 있다.

3.1. Multiple Inheritance - 자신만의 문자열 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_