Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 웹해킹
- 러닝 스칼라
- 러닝스칼라
- 파이썬
- Shellcode
- Javascript
- 챗GPT
- c++
- Python
- Linux
- hacking
- deep learning
- webhacking
- 리눅스
- php
- Scala
- flask
- 백엔드
- 딥러닝
- backend
- BOF 원정대
- hackthissite
- ChatGPT
- c
- 경제
- BOF
- Web
- 인공지능
- mysql
- hackerschool
Archives
- Today
- Total
jam 블로그
[C++] 011. string 클래스 디자인 본문
728x90
I. C++ 표준 라이브러리
- 책을 읽어보시오
II. 표준 string 클래스
- #include <iostream>
#include <string>
using namespace std; - int main()
{
string str1 = "Good";
string str2 = "morning";
string str3 = str1+str2; - cout<<str1<<endl;
cout<<str2<<endl;
cout<<str3<<endl; - str1 += str2;
- if (str1==str3)
{
cout<<"equal!"<<endl;
}
string str4;
cout<<"문자열 입력 : ";
cin>>str4;
cout<<"입력한 문자열 : "<<str4<<endl;
return 0;
}
- 예시이다.
III. 사용자 정의 string 클래스
구현해야 할 string 클래스의 특징이다.
- 첫번째, 생성자, 소멸자, 복사 생성자 그리고 대입 연산자를 정의해야한다.
- 둘째, 문자열을 인자로 전달받는 생성자를 정의해야 한다.
- 셋째, + 연산자를 오버로딩해야 한다.
- 넷째 <<연산자를 오버로딩해야한다.
- 다섯째 +=연산자를 오버로딩해야한다.
- 여섯째 내용 비교를 하도록 == 연산자를 오버로딩해야한다.
- 일곱째 >> 연산자를 오버로딩해야한다.
- #include <iostream>
- using std::cout;
using std::ostream;
using std::istream;
using std::endl; - class string
{
int len;
char* str;
public:
string(const char* s=NULL);
string(const string& s);
~string(){} - string& operator=(const string& s);
string& operator+=(const string& s);
bool operator==(const string& s);
string operator+(const string& s); - friend ostream& operator>>(ostream& os, const string& s);
friend istream& operator<<(istream& is, string & s);
};
- 첫째인 생성자, 소멸자, 복사 생성자, 대입 연산자의 정의에 대한 것이다.
- string::string(const char *s)
{
len=(s!=NULL?strlen(s)+1:1);
str = new char[len]; - if(s!=NULL)
{
strcpy(str,s);
}
}
- string 클래스에 필요로 하는 생성자이다.
- string::string(const string &s)
{
len=s.len;
str=new char[len];
strcpy(str,s.str);
} - string::~string()
{
delete []str;
}
- 위의 소스는 소멸자와 깊은 복사를 하는 복사 생성자 정의이다.
- string& string::operator =(const string &s)
{
delete []str;
len=s.len;
str = new char[len];
strcpy(str,s.str);
return *this;
}
- 위의 소스는 대입연산자 정의이다.
- string string::operator +(const string &s)
{
char* tStr=new char[len+s.len-1];
strcpy(tStr,str);
strcat(tStr,s.str); - string temp(tStr);
delete []tStr;
return temp;
}
- operator+에 대한 연산자의 오버로딩이다.
- ostream& operator<<(ostream& os, const string& s)
{
os<<s.str;
return os;
}
- 문자열을 출력할수 있도록 <<연산자를 오버로딩 한것이다.
- string& string::operator +=(const string &s)
{
len = len+s.len-1;
char* tStr=new char[len];
strcpy(tStr,str);
delete []str; - strcat(tStr,s.str);
str=tStr;
return *this;
}
- operator += 연산자의 오버로딩이다.
- bool string::operator ==(const string &s)
{
return strcmp(str,s.str)? false:true;
}
- 내용을 비교하는 ==연산자 오버로딩이다.
- istream& operator>>(istream& is,string& s)
{
char str[100];
is>>str; - s=string(str);
return is;
}
- >>연산자의 오버로딩이다.
- #include <iostream>
- using std::cout;
using std::ostream;
using std::istream;
using std::endl;
class string
{
int len;
char* str;
public:
string(const char* s=NULL);
string(const string& s);
~string();- string& operator=(const string& s);
string& operator+=(const string& s);
bool operator==(const string& s);
string operator+(const string& s); - friend ostream& operator<<(ostream& os, const string& s);
friend istream& operator>>(istream& is, string & s);
};
string::string(const char *s)
{
len=(s!=NULL?strlen(s)+1:1);
str = new char[len]; - if(s!=NULL)
{
strcpy(str,s);
}
}
string::string(const string &s)
{
len=s.len;
str=new char[len];
strcpy(str,s.str);
} - string::~string()
{
delete []str;
}
string& string::operator =(const string &s)
{
delete []str;
len=s.len;
str = new char[len];
strcpy(str,s.str);
return *this;
}
string string::operator +(const string &s)
{
char* tStr=new char[len+s.len-1];
strcpy(tStr,str);
strcat(tStr,s.str); - string temp(tStr);
delete []tStr;
return temp;
}
ostream& operator<<(ostream& os, const string& s)
{
os<<s.str;
return os;
}
string& string::operator +=(const string &s)
{
len = len+s.len-1;
char* tStr=new char[len];
strcpy(tStr,str);
delete []str; - strcat(tStr,s.str);
str=tStr;
return *this;
}
bool string::operator ==(const string &s)
{
return strcmp(str,s.str)? false:true;
}
istream& operator>>(istream& is,string& s)
{
char str[100];
is>>str; - s=string(str);
return is;
}
int main()
{
string str1 = "hello world"; - cout<<str1<<endl;
return 0;
}
- 여지껏 만든 것이 string헤더에 있는 string과 같은 역할을 하는 것을 만들어 보았다.
'개발 및 관련 자료 > C' 카테고리의 다른 글
[C++] 013. 예외처리(Exception Handling) (0) | 2013.05.12 |
---|---|
[C++] 012. 템플릿(Template) (0) | 2013.05.12 |
[C++] 010. 연산자 오버로딩 (0) | 2013.05.12 |
[C++] 009. virtual의 원리와 다중 상속 (0) | 2013.05.12 |
[C++] 008. 상속과 다형성 (0) | 2013.05.12 |
Comments