#include <iostream>
using namespace std;
class Str
{
private:
char *buf; //동적 메모리 할당을 위한 포인터
int size;
public:
Str(); //디폴트 생성자
Str(const char *ptr); //문자열로부터 생성
Str(const Str &Other); //복사 생성자
~Str(); //파괴자
Str &operator =(const Str &Other);
const Str operator +(Str &Other) const;//연결 연산자
const Str operator +(const char *ptr) const { return *this+Str(ptr); }
int length() const { return strlen(buf); }
friend ostream &operator <<(ostream &c, const Str &S);//출력 연산자
};
//출력 연산자
ostream &operator <<(ostream &c, const Str &S)
{
c << S.buf;
return c;
}
//디폴트 생성자
Str::Str()
{
buf = 0;
size = 0;
}
//문자열로부터 생성
Str::Str(const char *ptr)
{
buf = new char [strlen(ptr)+1];
strcpy(buf,ptr);
}
//복사 생성자
Str::Str(const Str &Other) //
{
buf = new char [strlen(Other.buf)+1];
strcpy(buf,Other.buf);
}
//파괴자
Str::~Str()
{
delete[] buf;
buf = NULL;
}
//대입 연산자
Str &Str::operator =(const Str &Other)
{
if(buf != NULL) delete buf;
buf = new char [strlen(Other.buf)+1];
strcpy(buf,Other.buf);
return (*this); //현재 객체 주소의 값을 반환
}
////연결 연산자6
const Str Str::operator +(Str &Other) const
{
Str Data;
Data.buf = new char [strlen(Other.buf)+strlen(this->buf)+1];
strcpy(Data.buf,(this->buf));
strcpy(Data.buf+strlen(this->buf),Other.buf);
return Data;
}
void main()
{
Str s1("GJSSM"); // 문자열로 생성자
Str s2(s1); // 복사 생성자
Str s3; // 디폴트 생성자
s3=s1; // 대입 연산자
cout<<"s1="<<s1<<endl;
cout<<"s2="<<s2<<endl;
cout<<"s3="<<s3<<endl;
while(1)
{
Str s4 = "GJ";
Str s5 = "SSM";
}
Str s6 = "GJ";
s6 = s6+"SSM";
cout<<"s6+SSM="<<s6<<endl;
}
'Soft Ware > C++ 언어!!' 카테고리의 다른 글
string 을 이용한 문자 비교함수 구현!! (0) | 2012.02.05 |
---|---|
템블릿 STL<vector>를 이용한 소스 (0) | 2012.02.03 |
템플릿의 구체적 명시화를 이용한 간단한 프로그램 ^^ (0) | 2012.02.02 |
템플릿을 이용한 클래스 작성하기 ^^ (0) | 2012.02.02 |
itoa 를 구현해 보자!! ㅎㅎㅎ (0) | 2012.01.28 |