C++ 표준 라이브러리에는 string 이라는 이름의 클래스가 정의되어 있다. 클래스의 이름이 의미하는 것처럼, 문자열의 처리를 목적으로 정의된 클래스이며, 이 클래스의 사용을 위해서는 헤더파일 <string> 을 포함해야 한다.


string 클래스를 대체할 수 있는 String 클래스를 구현해 보자~!!


표준 string 클래스의 분석


1. 문자열을 인자로 전달받는 생성자의 정의


2. 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의

- 저장하고자 하는 문자열의 길이가 일정치 않다. 따라서 문자열의 저장을 위한 메모리 공간을 생성자 내에서 동적 할당해야 한다. 

그리고 이로 인해서 소멸자를 정의해야 하며, 깊은 복사를 하는 복사 생성자와 대입 연산자까지 함께 정의하고자 한다.


3. 결합된 문자열로 초기화된 객체를 반환하는 + 연산자의 오버로딩

- + 연산자의 반환 값은 2가지로 생각할 수 있다.

1. 문자열의 주소 값(str1과 str2가 지니고 있는 문자열을 합한 문자열의 주소 값)

2. string 객체(str1과 str2가 지니고 있는 문자열을 합한 문자열을 저장하고 있는 객체)


4. 문자열을 덧붙이는 += 연산자의 오버로딩


5. 내용비교를 진행하는 == 연산자의 오버로딩


6. 콘솔입출력이 가능하도록 <<, >> 연산자의 오버로딩





61행: 주석에 달린 것 처럼 *this = *this+s;

                return *this; 

이렇게 정의해도 똑같다. 이러한 형태의 정의는 간결해 보이고 이해하기도 좋지만, 덧셈의 과정에서 객체가 추가로 생성된다는 단점이 있다.

하지만 컴퓨팅 파워가 좋은 환경이라면 이 정도는 단점이 될 수 없다. 이러한 형태의 구현도 생각해볼 만하다.


※ #include <string> 헤더파일을 포함시키면, 이렇게 직접 구현하지않고 이런식이 되도록 쓸 수 있다.


Posted by scii
: