C++의 새로운 표준안
표준string 클래스
문자열처리 클래스의 정의
표준 string 클래스의 분석
String 클래스의 완성1: 클래스의 선언
String 클래스의 완성2: 복사생성자, 대입연산자
String 클래스의 완성3: 나머지 멤버 함수들
String.h
#include <iostream>
using namespace std;
class String
{
char* str;
rsize_t len;
public:
String(); // default 생성자
String(const char* s); // 생성자
String(const String& s); // 복사생성자
~String(); // 소멸자
String& operator=(const String& s); // 대입연산자
String& operator+=(const String& s); // 단축연산자
String operator+(const String& s); // 덧셈연산자
bool operator==(const String& s); // 비교연산자
friend ostream& operator<<(ostream& ostrm, const String& s); // <<연산자
friend istream& operator>>(istream& istrm, String& s); // >>연산자
};
String.cpp
#include "String.h"
String::String()
:str(NULL), len(0) {}
String::String(const char* s)
{
len = strlen(s) + 1;
str = new char[len];
strcpy_s(str, len, s);
}
String::String(const String& s)
{
len = s.len;
str = new char[len];
strcpy_s(str, len, s.str);
}
String::~String()
{
if (str != NULL)
delete[]str;
}
String& String::operator=(const String& s)
{
if (str != NULL)
delete[]str;
len = s.len;
str = new char[len];
strcpy_s(str, len, s.str);
return *this;
}
String& String::operator+=(const String& s)
{
len += (s.len - 1);
char* tmp = new char[len];
strcpy_s(tmp, len, str);
strcat_s(tmp, len, s.str);
if (str != NULL)
delete[]str;
str = tmp;
return *this;
}
String String::operator+(const String& s)
{
rsize_t cat_len = len + s.len - 1;
char* tmp = new char[cat_len];
strcpy_s(tmp, cat_len, str);
strcat_s(tmp, cat_len, s.str);
String newString(tmp);
delete[]tmp;
return newString;
}
bool String::operator==(const String& s)
{
return strcmp(str, s.str) ? false : true;
}
ostream& operator<<(ostream& ostrm, const String& s)
{
ostrm << s.str;
return ostrm;
}
istream& operator>>(istream& istrm, String& s)
{
char str[100];
istrm >> str;
s = String(str); // 임시객체 사용
return istrm;
}
main.cpp
#include "String.h"
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;
cout << str1 << endl;
if (str1 == str3)
cout << "동일 문자열!" << endl;
else
cout << "동일하지 않은 문자열!" << endl;
String str4;
cout << "문자열 입력: ";
cin >> str4;
cout << "입력한 문자열: " << str4 << endl;
return 0;
}
'열혈강의c++' 카테고리의 다른 글
Chapter 13-2. 클래스템플릿(Class Template) (0) | 2022.07.21 |
---|---|
[ 열혈C++ ] Chapter 13-1. 템플릿(Template)에 대한 이해와 함수 템플릿 (0) | 2022.07.21 |
[ 열혈C++ ] OOP : 단계별 프로젝트 08/09단계 (0) | 2022.07.21 |
[ 열혈C++ ] Chapter 11-3. 그 이외의 연산자 오버로딩 (0) | 2022.07.21 |
[ 열혈C++ ] Chapter 11장 연습문제 (0) | 2022.07.21 |