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 | 31 | 
													Tags
													
											
												
												- BOF 원정대
- 리눅스
- php
- Scala
- hackerschool
- hacking
- Python
- 챗GPT
- ChatGPT
- 러닝 스칼라
- 인공지능
- Javascript
- BOF
- Linux
- 백엔드
- backend
- webhacking
- c++
- Shellcode
- hackthissite
- flask
- 딥러닝
- 러닝스칼라
- deep learning
- c
- Web
- 파이썬
- 웹해킹
- mysql
- 경제
													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