이 String class는 표준 C++ 라이브러리의 string class와 다르다는데 주의하라. 이 특별한 String class는 직접 만들어진 것이고, Java 프로그래머들이 C++을 쉽게 사용하도록 하기 위해 만들어졌다. 만약 당신이 C++과 더 익숙하다면 표준 C++ 라이브러리에 제공되는 진짜 string class 를 사용 하는 것이 좋다.
String class를 사용하기 위해, 23절의 "example_String.cpp" 예제 프로그램과 23절의 String class를 보아라.
'String class' 는 char와 char * 타입을 완벽하게 대신할 수 있다. 'String class'를 char 처럼 사용할 수도 있고, 여러가지 다양한 기능도 사용할 수 있다. 23절 에 주어진 makefile에서 만들어지는 'libString.a'를 링크해야하고, C++ 라이브러리가 위치한 모든 곳의 라이브러리를 /usr/lib 나 /lib 디렉토리에 라이브러리를 복사해넣어야 한다. 'libString.a'를 사용하기 위해서는, 다음과 같이 컴파일하라.
g++ example.cpp -lString |
String aa; aa = "Creating an Universe is very easy, similar to creating a baby human."; // 프로그램에서 aa.val()을 'char *' 같이 사용할 수 있다. for (unsigned long tmpii = 0; tmpii < aa.length(); tmpii++) { //fprintf(stdout, "aa.val()[%ld]=%c ", tmpii, aa.val()[tmpii]); fprintf(stdout, "aa[%ld]=%c ", tmpii, aa[tmpii]); } // 실제로 'char *'로 사용하면.. for (char *tmpcc = aa.val(); *tmpcc != 0; tmpcc++) { fprintf(stdout, "aa.val()=%c ", *tmpcc); } |
'String class' 는 아래와 같은 연산자를 제공한다 :-
Equal to ==
Not equal to !=
Assignment =
Add to itself and Assignment +=
String concatenation or addition +
String aa; String bb("Bill Clinton"); aa = "put some value string"; // assignment operator aa += "add some more"; // Add to itself and assign operator aa = "My name is" + " Alavoor Vasudevan "; // string cat operator if (bb == "Bill Clinton") // boolean equal to operator cout << "bb is equal to 'Bill Clinton' " << endl; if (bb != "Al Gore") // boolean 'not equal' to operator cout << "bb is not equal to 'Al Gore'" << endl; |
String class에서 제공되는 함수들은 Java 의 String class와 같은 이름을 갖는다. 함수 이름과 동작은 Java의 String class와 완전히똑같다. StringBuffer class역시 제공된다. 이들은 Java와 C++간의 포팅을 쉽게 할 것이다 (잘라내기 & 붙여넣기와 최소한의 코드 조정 만을 필요로 할 것이다). Java의 함수에 들어있는 코드를 C++의 멤버함수로 복사하기만 하면 될 것이고, 최소한의 변경만으로도 C++에서 잘 컴파일 될 것이다. 또다른 이점은 Java와 C++을 모두 사용하는 개발자들이 둘 간의 문법이나 함수 이름을 따로따로 기억할 필요가 없어진다는 것이다.
예를들어 integer를 문자열로 바꾸는 것을 보면,
String aa; aa = 34; // '=' 연산자가 int를 string으로 바꾼다. cout << "The value of aa is : " << aa.val() << endl; aa = 234.878; // '=' 연산자가 float를 string으로 바꾼다. cout << "The value of aa is : " << aa.val() << endl; aa = 34 + 234.878; cout << "The value of aa is : " << aa.val() << endl; // 출력은 '268.878'일 것이다. // casting이 필요하다. aa = (String) 34 + " Can create infinite number of universes!! " + 234.878; cout << "The value of aa is : " << aa.val() << endl; // 출력은 '34 Can create infinite number of universes!! 234.878'일 것이다. |
String class의 함수이름에 대한 자세한 내용은 23절 를 참고해라. 같은 String.h파일이 다음 섹션에도 나올 것이다.
만약 String class의 이름이 맘에 들지 않는다면, "typedef" 를 이름을 바꾸기 위해 사용할 수 있다.
String.h를 include하는 모든 파일에 다음의 내용을 넣어라 :
// String이라는 이름이 맘에 들지 않는다면, 다음과 같이 바꾸어라. typedef String StringSomethingElseIwant; // 이제 코드는 다음과 같이 될 것이다. int main() { StringSomethingElseIwant aa_renstr; aa_renstr = "I renamed the String Class using typedef"; // ..... } |
다른 같은 이름을 가진 class와 이름이 겹치는데, 두 class를 모두 사용하고 싶다면, 다음과 같은 방법을 써라. String.h를 include하는 모든 파일에 다음의 내용을 넣어라.
#define String String_somethingelse_which_I_want #include "String.h" #undef String #include "ConflictingString.h" // 이것도 String이란 class이다. // 코드 내용.. int main() { String_somethingelse_which_I_want aa; String bb; // 이것은 겹치는 String class이다. aa = " some sample string"; bb = " another string abraka-dabraka"; ....... } |