5. String class »ç¿ëÇϱâ

ÀÌ 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);
	}

5.1. ¿¬»êÀÚ

'String class' ´Â ¾Æ·¡¿Í °°Àº ¿¬»êÀÚ¸¦ Á¦°øÇÑ´Ù :-

¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¿¹Á¦¸¦ º¸ÀÚ.
	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;

5.2. ÇÔ¼ö

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ÆÄÀÏÀÌ ´ÙÀ½ ¼½¼Ç¿¡µµ ³ª¿Ã °ÍÀÌ´Ù.

5.3. String classÀÇ À̸§ ¹Ù²Ù±â

5.3.1. Case 1: ´Ü¼øÇÑ À̸§ ¹Ù²Ù±â

¸¸¾à String classÀÇ À̸§ÀÌ ¸¾¿¡ µéÁö ¾Ê´Â´Ù¸é, "typedef" ¸¦ À̸§À» ¹Ù²Ù±â À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

String.h¸¦ includeÇÏ´Â ¸ðµç ÆÄÀÏ¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» ³Ö¾î¶ó :
// StringÀ̶ó´Â À̸§ÀÌ ¸¾¿¡ µéÁö ¾Ê´Â´Ù¸é, ´ÙÀ½°ú °°ÀÌ ¹Ù²Ù¾î¶ó.
typedef String StringSomethingElseIwant;

// ÀÌÁ¦ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÌ´Ù.
int main()
{
	StringSomethingElseIwant aa_renstr; 
	aa_renstr = "I renamed the String Class using typedef";

	// .....
}
example_String.cpp ¿¡ °¡¼­ 'Source code for C++'À» ¼±ÅÃÇØ¶ó.

5.3.2. Case 2: À̸§ÀÌ °ãÄ¥ ¶§

´Ù¸¥ °°Àº À̸§À» °¡Áø 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";
	.......
}
Àü󸮱Ⱑ ¸ðµç StringÀ» "String_somethingelse_which_I_want" À¸·Î ¹Ù²Ü °ÍÀ̰í, StringÀÇ Á¤ÀǸ¦ ¾ø¾Ù °ÍÀÌ´Ù. undef ´ÙÀ½ ºÎÅÍ´Â "String" class¸¦ Á¤ÀÇÇÏ´Â °ãÄ¡´Â string class header°¡ ¿À°Ô µÈ´Ù.