C++/summary

String 클래스의 구현 형태 - 클래스 정리.

gandus 2010. 6. 3. 12:50


#include <iostream>
using namespace std;

class MyString
{
private:
 char *pBuf;   //동적으로 할당된 메모리의 주소값 저장

public:
 MyString(const char *s=NULL);
 MyString(MyString& s);
 ~MyString();

 void print();     // 문자열을 화면에 출력
 int getSize();    // 문자열의 길이 반환
};

// 생성자
MyString::MyString(const char *s)
{
 if( s == NULL )
 {
  pBuf = new char[1];
  pBuf[0] = NULL;
 }
 else
 {
  pBuf = new char[::strlen(s)+1];
  strcpy(pBuf, s);
 }
}
// 복사 생성자
MyString::MyString(MyString &s)
{
 pBuf = new char[s.getSize()+1];
 strcpy(pBuf, s.pBuf);
}

// 소멸자
MyString::~MyString()
{
 if ( pBuf )
  delete [] pBuf;
}

void MyString::print()
{
 cout << pBuf << endl;
}

int MyString::getSize()
{
 return strlen(pBuf);
}

int main() {

 MyString str1;
 MyString str2("Hello");
 MyString str3 = "World!";
 MyString str4(str3);

 str1.print();
 str2.print();
 str3.print();
 str4.print();

 return 0;
}

기본적으로 돌아가는 사이클은 이전에 배운 복사 생성자와 다를게 없다.
쉽다? ㅋㅋㅋ 쉽겟지...