string 클래스의 간단한 예제
STDString.cpp
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string str1 = "I like ";
string str2 = "string class";
string str3 = str1 + str2;
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
str1 += str2;
if (str1 == str3)
cout << "동일 문자열!" << endl;
else
cout << "동일하지 않은 문자열!" << endl;
string str4;
cout << "문자열 입력: ";
cin >> str4;
cout << "입력한 문자열: " << str4 << endl;
return 0;
}
string간 덧셈연산 , <<연산, += 연산, >> 연산 모두 가능함을 알 수 있고 이는 오버로딩으로 인해 가능하다는 사실도 알 수 있다.
이 부분에서는 전 단원에서 배운 연산자 오버로딩, 생성자, 소멸자 등등을 통해 자신이 직접 String 클래스를 구현하고 자한다.
string 클래스는 다음과 같이 나뉘어져있다.
문자열을 인자로 전달받는 생성자의 정의
생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의
결합된 문자열로 초기화된 객체를 반환하는 + 연산자의 오버로딩
문자열을 덧붙이는 += 연산자의 오버로딩
내용 비교를 진행하는 ==연산자의 오버로딩
콘솔 입출력이 가능하도록 <<, >> 연산자의 오버로딩
이를 코드로 옮기면 다음과 같이 이루어 진다.
StringCalss.cpp
#include <iostream>
#include <cstring>
using namespace std;
class String
{
private:
int len;
char* str;
public:
String()
{
len = 0;
str = NULL;
}
String(const char* s) // 복사생성자 기본 문자열
{
len = strlen(s) + 1;
str = new char[len];
strcpy(str, s);
}
String(const String& s) // 복사생성자
{
len = s.len;
str = new char[len];
strcpy(str, s.str);
}
~String()
{
if (str != NULL)
delete []str;
}
String& operator= (const String& s) // 대입 연산자
{
if (str != NULL)
delete[] str;
len = s.len;
str = new char[len];
strcpy(str, s.str);
return *this;
}
String& operator+= (const String& s)
{
len += (s.len - 1);
char* tempstr = new char[len];
strcpy(tempstr, str);
strcat(tempstr, s.str);
if (str != NULL)
delete[] str;
str = tempstr;
return *this;
}
bool operator== (const String& s)
{
if (!strcmp(str, s.str))
return true;
else
return false;
}
String operator+ (const String& s)
{
char* tempstr = new char[len + s.len -1];
strcpy(tempstr, str);
strcat(tempstr, s.str);
String temp(tempstr);
delete[] tempstr;
return temp;
}
friend ostream& operator<< (ostream& os, const String& s);
friend istream& operator>> (istream& is, String& s);
};
ostream& operator<<(ostream& os, const String& s)
{
os << s.str;
return os;
}
istream& operator>>(istream& is, String& s)
{
char str[100];
is >> str;
s = String(str);
return is;
}
int main(void)
{
String str1 = "I like ";
String str2 = "string class";
String str3 = str1 + str2;
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
str1 += str2;
if (str1 == str3)
cout << "동일 문자열!" << endl;
else
cout << "동일하지 않은 문자열!" << endl;
String str4;
cout << "문자열 입력: ";
cin >> str4;
cout << "입력한 문자열: " << str4 << endl;
return 0;
}
앞 단원에서 배운 생성자, 복사생성자, 소멸자, 연산자 오버로딩을 활용하여 String클래스를 만들었다.