C++ Programming HOW-TOÁ¤Áö¿ëÀÌ ¹®¼´Â C++¿¡ °üÇÑ URL°ú C++ online Ã¥¿¡ ´ëÇÑ ¸µÅ©, C++ ÇÁ·Î±×·¡¹Ö ÆÁ µîÀ» Æ÷°ýÀûÀ¸·Î Á¦°øÇÑ´Ù. ÀÌ ¹®¼´Â C++¿¡¼ °Þ´Â ´Ù¾çÇÑ ¸Þ¸ð¸® °ü·Ã ¹®Á¦¸¦ ÇØ°áÇØÁÖ´Â Java¿Í ºñ½ÁÇÑ libraryµµ Á¦°øÇÑ´Ù. ÀÌ library¸¦ ÀÌ¿ëÇϸé, java ¼Ò½ºÄڵ带 C++·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ¹®¼´Â "C++ ¾ð¾îÀÇ Áý"¿ªÇÒÀ» ÇÑ´Ù.
ÀÌ ¹®¼¿¡¼ Á¦°øµÇ´Â Á¤º¸´Â C++ ¾ð¾î¸¦ ÀûÀýÈ÷ »ç¿ëÇÏ°í ¸ðµç ¿î¿µÃ¼Á¦ - ¸®´ª½º, MS-DOS, BeOS, Apple Macintosh OS, Microsoft Windows 95/98/NT/2000, OS/2, IBM OSes (MVS, AS/400 µî..), VAX VMS, Novell Netware, À¯´Ð½º-like OSµé(Solaris, HPUX, AIX, SCO, Sinix, BSD µî..)°ú ±âŸ C++À» Áö¿øÇÏ´Â ¸ðµç ¿î¿µÃ¼Á¦(¾Æ¸¶µµ ¼¼»óÀÇ °ÅÀÇ ¸ðµç ¿î¿µÃ¼Á¦°¡ ÀÌ¿¡ ¼ÓÇÒ °ÍÀÌ´Ù) - ¿¡ Àû¿ëÇÏ´Â °ÍÀ» µµ¿ÍÁÙ °ÍÀÌ´Ù. | 고친 과정 |
|---|
| 고침 41.8 | 2002-03-31 | 고친이 Á¤Áö¿ë | | ¼öÁ¤ÆÇ ¹ø¿ª | | 고침 5.0 | 2000-06-15 | 고친이 ±èÁöÈñ, À±ÁÖö | | ÃÖÃÊ ¹ø¿ª |
(ÀÌ ¹®¼ÀÇ ÃֽůÇÀº http://milkyway.bounceme.net/HOWTO/cpphowto/C++Programming-HOWTO.html ¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù) ÀÌ ¹®¼ÀÇ ¸ñÀûÀº C++¿¡ °üÇÑ URL°ú C++ online Ã¥¿¡ ´ëÇÑ ¸µÅ©, C++ ÇÁ·Î±×·¡¹Ö ÆÁ µîÀ» Æ÷°ýÀûÀ¸·Î Á¦°øÇÏ´Â °ÍÀÌ´Ù. ¶ÇÇÑ, ÀÌ ¹®¼´Â Java ½ºÅ¸ÀÏÀÇ String class, string tokenizer, ¸Þ¸ð¸® ÇÔ¼öµî ÀϹÝÀûÀÎ C++ ÇÁ·Î±×·¥¿¡¼ ³Î¸® ¾²ÀÏ ¼ö ÀÖ´Â ¸¹Àº ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
C++ °ú Java´Â ¿À´Ã³¯ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ ¾²À̰í ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â C++°ú Java¸¦ ¹ø°¥¾Æ°¡¸ç ¾²°ÔµÉ °ÍÀ̰í, ÀÌ Java ½ºÅ¸ÀÏÀÇ class°¡ ¸Å¿ì À¯¿ëÇÔÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù.
ÀÌ library¿Í C++ Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ »ç¿ë¹ýÀ» ¾Ë·ÁÁÙ ´Ù¾çÇÑ ¿¹Á¦°¡ Á¦½ÃµÉ °ÍÀÌ´Ù. ÀÌ ¹®¼´Â C++¿¡ ´ëÇÑ ±³°ú¼°¡ ¾Æ´Ï¸ç, ÀÌ¿¡ ´ëÇØ¼´Â ÀÌ¹Ì ¸î°¡Áö ÁÁÀº on-line Ã¥µéÀÌ ÀÖ´Ù.
C++ÀÌ ²Ï ¿À·£½Ã°£µ¿¾È »ç¿ëµÇ¾î¿Ô±â ¶§¹®¿¡, ¸Å¿ì ¸¹Àº ¼öÀÇ C++ ¹®¼/±Û/Æ©Å丮¾óÀÌ ÀÎÅÍ³Ý»ó¿¡ Á¸ÀçÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ C++À» óÀ½ Á¢ÇÏ´Â °ÍÀ̰í, C++ ÇÁ·Î±×·¥À» Â¥ º» ÀûÀÌ ¾ø´Ù¸é, 13절Àå¿¡ ¸µÅ©µÇ¾î ÀÖ´Â on-line C++ Ã¥À» ¸ÕÀú Àо°Å³ª, Amazon À̳ª barnes°ú °°Àº °÷¿¡¼ C++ Ã¥À» »ç º¼ °ÍÀ» ÃßõÇÑ´Ù. ´©±º°¡°¡ ¸»Çßµí - C/C++ ¾ð¾î´Â OS³ª µð¹ÙÀ̽ºµå¶óÀ̹ö, ºü¸¥ ÀÀ´äÀ» ÇÊ¿äÇÏ´Â real-time ÇÁ·Î±×·¥µîÀ» ¸¸µå´Â ½Ã½ºÅÛ ¿£Áö´Ï¾î³ª ¾²¶ó°í Çϰí,
´ç½ÅÀº 2002³âº¸´Ù ÄÄÇ»ÅͰ¡ ¸î¹é¸¸¹è »¡¶óÁú 2005³âÀ» »ý°¢Çϸé Java³ª PHP-scriptingÀ» ½á¾ßÇÑ´Ù.
Çϵå¿þ¾î ´Â Á¡Á¡ ½Î¸é¼µµ, »¡¶óÁø´Ù.
C++Àº °¡Àå °·ÂÇÑ ¾ð¾îµé Áß ÇϳªÀ̰í, Java³ª PHP-scripting °°Àº °ÍÀÌ ³ªÅ¸³µÁö¸¸, ¾ÕÀ¸·Îµµ ¿À·£ ½Ã°£µ¿¾È ¾²ÀÌ°Ô µÉ °ÍÀÌ´Ù.
½Ç½Ã°£ÀÇ ¸Å¿ì ºü¸¥ ÀÀ´äÀ» ÇÊ¿äÇÏ´Â ÇÁ·Î±×·¥¿¡´Â C³ª C++ÀÌ »ç¿ëµÈ´Ù.
C++Àº ¸Å¿ì ºü¸£°Ôµ¿ÀÛÇϰí,
½ÇÁ¦·Î Javaº¸´Ù 10¹è¿¡¼ 20¹è Á¤µµ ºü¸£´Ù .
Java´Â C++¿¡¼ "ÆÄ»ýµÈ" ¾ð¾îÀÌ´Ù.
JavaÀÇ ´Ü ÇϳªÀÇ ¹®Á¦Á¡Àº ¹Ù·Î - "Java ´Â ´À¸®´Ù!!"´Â °ÍÀÌ´Ù.
VMÀ§¿¡¼ µµ´Â Java ¹ÙÀÌÆ®ÄÚµå´Â ÄÄÆÄÀÏµÈ ½ÇÇàÄڵ庸´Ù ´À¸®°í,
JIT(Just-In-Time) ÄÄÆÄÀÏ·¯ À§¿¡¼ ´õ ºü¸£°Ô µ¹±â´Â ÇÏÁö¸¸, ¿©ÀüÈ÷ C++º¸´Ù´Â ´À¸®´Ù.
ÃÖÀûÈ µÈ C/C++ ÇÁ·Î±×·¥Àº JIT ³ª ±× ÀÌÀüÀÇ ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏ µÈ Java Äڵ庸´Ù
¾à 3 ¿¡¼ 4¹è Á¤µµ ºü¸£´Ù!!
±×·¸´Ù¸é, ¿Ö »ç¶÷µéÀÌ Java¸¦ ¾²´Â°¡? ÀÌ´Â Java°¡ ¼ø¼öÇÑ °´Ã¼ÁöÇâÀ» Áö¿øÇϰí, JavaÀÇ ÀÚµ¿ÈµÈ ¸Þ¸ð¸® °ü¸®·Î ÀÎÇØ ÇÁ·Î±×·¡¹ÖÇϱⰡ ½¬¿ì¸ç,
ÇÁ·Î±×·¡¸ÓµéÀÌ Á÷Á¢ ¸Þ¸ð¸® °ü¸®Çϱ⸦ ½È¾îÇϱ⠶§¹®ÀÌ´Ù.
ÀÌ ¹®¼´Â C++ÀÇ ¸Þ¸ð¸® °ü¸®¸¦ ÀÚµ¿ÈÇÏ¿© ÈξÀ »ç¿ëÇϱ⠽±°Ô ÇϰíÀÚ Çß´Ù.
¿©±â¼ ³ª¿À´Â library´Â C++À» Java ¸¸Å ½±°Ô ´À³¢°Ô ÇØÁÙ °ÍÀ̰í, C++ÀÌ Java¿Í °æÀïÇÒ ¼ö ÀÖµµ·Ï ÇØÁÙ °ÍÀÌ´Ù. ¼öµ¿ÀûÀÎ ¸Þ¸ð¸® °ü¸®¸¦ À§ÇØ C++ ÇÁ·Î±×·¥ µð¹ö±ëÀÇ ´ëºÎºÐ ½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù.
ÀÌ ¹®¼´Â µð¹ö±ë ½Ã°£À» ÁÙÀ̱â À§ÇÑ ¸î°¡Áö ¾ÆÀ̵ð¾î¿Í ÆÁÀ» ÁÙ °ÍÀÌ´Ù. ¾ðÁ¦ C++À» ½á¾ßÇÏ°í ¾ðÁ¦ Java/PHP¸¦ ½á¾ßÇϴ°¡? ¾Æ·¡¿Í °°Àº °æ¿ì¿£ C++À» ½á¶ó:
½ÇÇà¼Óµµ¿Í ¼º´ÉÀÌ ¸Å¿ì Áß¿äÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¶§. ¸¸µå´Â ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÚ ¼ö°¡ ¸¹À» ¶§. C++Àº ÄÄÆÄÀÏ-¸µÅ·-µð¹ö±ë »çÀÌŬÀÌ ÇÊ¿äÇϱ⠶§¹®¿¡, ÇÁ·Î±×·¥ °³¹ß¿¡ ´õ ¸¹Àº ½Ã°£ÀÌ ¼Ò¿äµÈ´Ù.
µû¶ó¼ »ç¿ëÀÚ¼ö°¡ ÃæºÐÈ÷ ¸¹À» ¶§¿¡³ª Àû´çÇÏ´Ù. ½ÇÇàÆÄÀÏÀ» ¸¸µé±â À§ÇØ ¸¹Àº ¼öÀÇ objectÆÄÀÏÀ» ¸µÅ©ÇÏ´Â °ÍÀº ²Ï ½Ã°£ÀÌ °É¸°´Ù.
(¸µÅ©Çϴµ¥ °É¸®´Â ½Ã°£À» ÁÙÀ̱â À§ÇØ archive³ª ¶óÀ̺귯¸®, °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.) C++ÇÁ·Î±×·¡¹Ö °æÇèÀÌ ¸¹À» ¶§.
Java/PHP¸¦ ½á¾ßÇÒ °æ¿ì:
(C/C++·Î ÀÛ¼ºµÇ´Â °Í¿¡ ºñÇØ¼) ½ÇÇà¼Óµµ¿Í ¼º´ÉÀÌ Áß¿äÇÏÁö ¾ÊÀ» ¶§. »ý»ê ºñ¿ëÀ» ³·Ãß±â À§ÇØ - ÄÄÆÄÀÏ-¸µÅ© »çÀÌŬÀÌ ¾ø±â ¶§¹®¿¡, Java/PHP´Â C++º¸´Ù °³¹ßÀÌ ºü¸£´Ù. ºü¸¥ °³¹ßÀÌ ÇÊ¿äÇÒ ¶§. ÄÚµå À¯Áöº¸¼ö¸¦ ½±°Ô Çϱâ À§ÇØ. C++ À» À¯Áöº¸¼öÇÏ´Â °ÍÀÌ Java³ª PHP-scripting º¸´Ù ÈξÀ ¾î·Æ´Ù. Java¿Í PHP-scriptingÀº ¹Ì·¡ÀÌ´Ù, Çϵå¿þ¾îÀÇ ¼Óµµ´Â ºÐÀÚ¿Í ¿øÀÚ, ¿øÀÚº¸´Ù ÀÛÀº Å©±âÀÇ ÄÄÇ»ÅÍ µµÀÔ°ú ÇÔ²² ±ÞµîÇÒ °ÍÀÌ´Ù.
¹Ì·¡ÀÇ ÄÄÇ»ÅÍ´Â ¿À´Ã³¯ ÄÄÇ»ÅÍÀÇ ¼öÁ¶¹èÀÇ ¼º´ÉÀ» °¡Áú °ÍÀÌ´Ù. ¹Ì·¡¿¡ Çϵå¿þ¾î ¼º´ÉÀÌ Áøº¸ÇÔ°ú ÇÔ²², Java³ª PHP-scriptÀÇ ´À¸° ½ÇÇà ¼Óµµ´Â Áß¿äÄ¡ ¾Ê°Ô µÉ °ÍÀÌ´Ù.
¿À´Ã³¯ ´ç½ÅÀÌ ¾²´Â ÄÄÇ»ÅÍ(ÇöÀç´Â 2002³âÀÌ´Ù.)´Â ¾öû³ª°Ô ´À¸®°í, ±â¾î°¡°í ÀÖÀ¸¸ç, ÃæºÐÈ÷ ºü¸£Áö ¸øÇÏ´Ù.
NOTE: Java ÄÄÆÄÀÏ·¯ (JIT ³ª ´Ù¸¥ °Íµé)¿¡ ¸¹Àº Áøº¸°¡ ÀÖ¾ú´Ù. Java ÇÁ·Î±×·¥Àº GNU GCJ http://gcc.gnu.org/java·Î ÄÄÆÄÀÏ µÉ ¼ö ÀÖ´Ù.
GCJ´Â °£ÆíÇϰí, ÃÖÀûȵǾîÀÖÀ¸¸ç, Áøº¸ÀûÀÎ Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ À§ÇÑ ÄÄÆÄÀÏ·¯ÀÌ´Ù.
GCJ´Â Java source Äڵ带 ¸Ó½Å ÄÚµå·Î ¹Ù·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ°í, Java ¹ÙÀÌÆ®ÄÚµå(class file)·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ´Ù. GCJ Á¤º¸:
¾ð¾îÀÇ ¼±ÅÃÀº ¾î·Á¿î ÀÏÀÌ´Ù. ¿©±â¿£ ³Ê¹«³ª ¸¹Àº °í·ÁÇÒ »çÇ×ÀÌ ÀÖ´Ù - °³¹ßÀÚ,
»ç¶÷ÀÇ ´É·Â, ºñ¿ë, Åøµé, Á¤Ã¥ (±¹°¡ÀÇ Á¤Ä¡ Á¤Ã¥±îÁöµµ), »ç¾÷°¡³ª ȸ»çµé¿¡ ´ëÇÑ
¿µÇâ±îÁö.
±â¼úÀûÀÎ ÀÌÀ¯·Î´Â ÃÖÀûÀÇ ¾ð¾îÀÏÁö¶óµµ ´Ü¼øÈ÷ Á¤Ä¡ÀûÀÎ °áÁ¤À¸·Î ÀÎÇØ ¼±ÅõÇÁö
¸øÇÒ ¼öµµ ÀÖ´Ù. David WheelerÀÇ ¾ð¾î ºñ±³¸¦ º¸ÀÚ.
Ada ºñ±³ Â÷Æ®.
Ada°¡ 93%, Java´Â 72%, C++Àº 68% C´Â 53%À» °¢°¢ ¹Þ¾Ò´Ù.
C++°ú Java´Â Á¡¼ö¸é¿¡¼´Â ºñ½ÁÇÏ´Ù (4% Â÷ÀÌ).
AdaÀÇ °³¹ß ºñ¿ëÀº
Stephen F. Zeigler¿¡ µû¸£¸é C++ÀÇ ¹ÝÀýÀÌ´Ù.
Ada95´Â ¾Æ·¡¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù -
C++ ÄÄÆÄÀÏ·¯´Â C ÄÄÆÄÀÏ·¯º¸´Ù ÈξÀ º¹ÀâÇϰí, C++Àº Cº¸´Ù ¾à°£ ´À¸®°Ô µ¿ÀÛÇÒ
¼ö ÀÖ´Ù.
C ÄÄÆÄÀÏ·¯´Â ÃæºÐÈ÷ ¿À·¨µ¿¾È Àß ¾²¿©Á®¿Ô´Ù. ¸î¸î ½Ã½ºÅÛ¿¡¼, ´ç½ÅÀº »ý¼ºµÈ Äڵ带 ÃÖÀûÈ Çϱâ À§ÇØ ¸î°¡Áö ¿É¼ÇÀ» ¾µ ¼ö
ÀÖ´Ù. ¿À´Ã³¯, C´Â ÁÖ·Î ¿î¿µÃ¼Á¦³ª µð¹ÙÀ̽º µå¶óÀ̹ö, ºü¸£°Ô ÀÛµ¿ÇؾßÇÏ´Â ÇÁ·Î±×·¥À»
¾²±â À§ÇØ ·Î¿ì·¹º§ ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö¿¡ ¾²ÀδÙ. Note: ÀÌ HOWTO¿¡ Á¦°øµÇ´Â String,
StringBuffer, StringTokenizer class¸¦ ÀÌ¿ëÇÏ¿© C++ Äڵ带 Java¿Í ¿ÏÀüÈ÷ ¶È°°ÀÌ
¾µ ¼ö ÀÖ´Ù. ÀÌ ¹®¼ÀÇ ÀϺδ C++·Î Java class¸¦ Èä³»³¿À¸·Î½á C++°ú JavaÀÇ Â÷À̸¦ ÁÙÀ̰íÀÚ Çß´Ù.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â Java ÇÁ·Î±×·¡¸ÓµéÀº ÀÌ String class¸¦ ÁÁ¾ÆÇÒ °ÍÀÌ´Ù. ¸¸¾à C++ÀÇ ÀÛ¼º-ÄÄÆÄÀÏ-µð¹ö±ë-ÄÄÆÄÀÏ ½ÎÀÌŬÀÌ ½È´Ù¸é, web °³¹ßÀ̳ª ÀϹÝÀûÀÌ ÇÁ·Î±×·¡¹Ö¿¡ ¾²ÀÏ ¼ö ÀÖ´Â PHP°°Àº script ¾ð¾î¸¦ ¾Ë¾Æº¸¾Æ¶ó.
PHP³ª PERL°°Àº script¾ð¾î´Â ºü¸¥ ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. PHP´Â ¸î°¡Áö °´Ã¼ÁöÇâÀ» À§ÇÑ Æ¯Â¡µµ °®°í ÀÖ´Ù. PHP HOWTO´Â
http://doc.kldp.org/wiki.php/LinuxdocSgml/PHP-HOWTO ¿¡¼ º¼ ¼ö ÀÖ°í, ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â PHP °ø½Ä ȨÆäÀÌÁö¸¦ Âü°íÇÏ¸é µÈ´Ù.
C++Àº C¸¦ Æ÷ÇÔÇϱ⠶§¹®¿¡, CÀÇ *³ª»Û* Á¡µéÀ» ¸ðµÎ °®°í ÀÖ´Ù.
¸Þ¸ð¸®ÀÇ ¼öµ¿ ÇÒ´ç°ú ÇØÁ¦´Â Áö·çÇϰí, ¿¡·¯¸¦ ¸¸µé¾î³»±â ÀϾ¥ÀÌ´Ù. ( 9.3절 ¸¦ º¸¶ó). C ÇÁ·Î±×·¡¹Ö¿¡¼´Â ´ÙÀ½°ú °°Àº °Íµé·Î ÀÎÇØ ¸Þ¸ð¸® ¸¯À̳ª ¿À¹öÇ÷ο찡 ¸Å¿ì ÈçÇÏ´Ù.
Datatype char * and char[]
String functions like strcpy, strcat, strncpy, strncat, etc..
Memory functions like malloc, realloc, strdup, etc.. |
char *¿Í strcpyÀÇ »ç¿ëÀº
"¿À¹öÇ÷οì",
"°æ°èħ¹ü¿¡·¯(fence past errors)", "¸Þ¸ð¸® ¿À¿°(memory corruption)",
"´Ù¸¥º¯¼ö ħ¹ü(step-on-others-toe)" À̳ª "¸Þ·Î¸® ¸¯(memory leaks)" µîÀÇ ²ûÂïÇÑ ¸Þ¸ð¸® ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù.
¸Þ¸ð¸® ¹®Á¦´Â ¸Å¿ì µð¹ö±ëÀÌ Èûµé°í, µû¶ó¼ °íÄ¡±â´Âµ¥ ¸¹Àº ½Ã°£ÀÌ µç´Ù.
¸Þ¸ð¸® ¹®Á¦´Â ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» ¶³¾î¶ß¸°´Ù. ÀÌ ¹®¼´Â C++ÀÇ ÀÌ·¯ÇÑ ´ÜÁ¡À»
ÇØ°áÇϱâ À§ÇØ °í¾ÈµÈ ¿©·¯°¡Áö ¹æ¹ýµéÀ» ÅëÇØ, ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» ³ôÀ̴µ¥ µµ¿òÀ»
ÁÖ°íÀÚ ÇÑ´Ù.
¸Þ¸ð¸® °ü·Ã ¹ö±×´Â Àâ±â Èûµé°í, °æÇ踹Àº ÇÁ·Î±×·¡¸Óµéµµ ¸Þ¸ð¸® °ü·Ã ¹®Á¦¸¦ °íÄ¡´Â µ¥´Â
¸çÄ¥¿¡¼ ¸îÁÖ°¡ °É¸°´Ù.
¸Þ¸ð¸® ¹ö±×´Â ¸î´Þµ¿¾È ÄÚµå ¼Ó¿¡ ¼û¾î¼ °©ÀÛ½º·± ÇÁ·Î±×·¥ Á¤Áö¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.
char * ¿Í C/C++¿¡¼ÀÇ Æ÷ÀÎÅÍ
»ç¿ëÀ¸·Î ÀÎÇÑ ¸Þ¸ð¸® ¹ö±×´Â µð¹ö±ë°ú ÇÁ·Î±×·¥ Á¤Áö·Î ÀÎÇØ ¸Å³â 20¾ï ´Þ·¯¿¡ ÇØ´çÇÏ´Â
½Ã°£ÀÇ ¼Ò¸ð¸¦ ÀÏÀ¸Å²´Ù.
¸¸¾à C++¿¡¼
char * °ú Æ÷ÀÎÅÍ
¸¦ »ç¿ëÇÑ´Ù¸é, ±×¸®°í ƯÈ÷ ÇÁ·Î±×·¥ÀÇ Å©±â°¡ 10,000 ÁÙÀÌ ³Ñ¾î°¡´Â »óȲÀ̶ó¸é, ¸Å¿ì Èûµç ÀÏÀÌ µÉ °ÍÀÌ´Ù. µû¶ó¼, ¾Æ·¡ÀÇ °ÍµéÀÌ C-style¿¡¼ÀÇ ¹®Á¦Á¡À» ±Øº¹Çϱâ À§ÇØ Á¦¾ÈµÇ¾ú´Ù.
¾Õ¿¡ ³ª¿Ã ¼ö·Ï ´õ ÁÁÀº °ÍÀÌ´Ù.
Æ÷ÀÎÅÍ ´ë½Å ·¹ÆÛ·±½º¸¦ »ç¿ëÇÑ´Ù. (ÀÌ HOWTO¿¡ ÁÖ¾îÁø) Java Çü½ÄÀÇ class¸¦ »ç¿ëÇϰųª, C++ Ç¥ÁضóÀ̺귯¸®ÀÇ string class¸¦ »ç¿ëÇÑ´Ù. C++¿¡¼ÀÇ ¹®ÀÚ Æ÷ÀÎÅÍ(char *) »ç¿ëÀº String class¸¦ »ç¿ëÇÏÁö ¸øÇÒ ¶§·Î ±× »ç¿ëÀ» Á¦ÇÑÇÑ´Ù. ¸¸¾à C++¿¡¼ÀÇ ¹®ÀÚ Æ÷ÀÎÅÍ(char *)¸¦ »ç¿ëÇÏ°í ½ÍÁö ¾ÊÀ» ¶§´Â, extern ¿¬°è¸¦ ÀÌ¿ëÇÏ´Â (char *)¸¦.
"CÀÇ char *"¸¦ »ç¿ëÇϱâ À§Çؼ´Â, C ÇÁ·Î±×·¥À» ´Ù¸¥ ÆÄÀÏ¿¡ ³Ö°í,
¿¬°è¸í½Ã ¹® extern "C" ¸¦ ÀÌ¿ëÇÏ¿©
C++ ÇÁ·Î±×·¥¿¡ ¸µÅ©ÇÑ´Ù -
extern "C" {
#include <some_c_header.h>
}
extern "C" {
comp();
some_c_function();
} |
extern "C" ´Â ¿¬°è ¸í½ÃÀ̰í, ¾ç Áß°ýÈ£·Î µÑ·¯½ÎÀÎ
ºí·Ï¾ÈÀÇ ¸ðµç ³»¿ëÀÌ C++ÀÌ ¾Æ´Ñ CÀÇ ¿¬°è ¹æ¹ýÀ» »ç¿ëÇÑ´Ù´Â ¸»ÀÌ´Ù. 'String Ŭ·¡½º'´Â ¸Þ¸ð¸® ÇÒ´ç°ú ÇØÁ¦¸¦ À§ÇØ »ý¼ºÀÚ¿Í
ÆÄ±«ÀÚ¸¦ ÀÌ¿ëÇϰí,
ltrim, substring µîµî°ú °°Àº
ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ¶ÇÇÑ °ü·ÃµÈ 7절 ¸¦ »ç¿ëÇÏ´Â C++ ÄÄÆÄÀÏ·¯¿¡¼ ã¾Æº¸¾Æ¶ó.
string Ŭ·¡½º´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ ÀϺÎÀ̰í, ¿©·¯°¡Áö
¹®ÀÚ¿ °ü·Ã ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. C++ 'string Ŭ·¡½º' ¿Í 'String Ŭ·¡½º'
¶óÀ̺귯¸®°¡ ¸¹Àº ¹®ÀÚ¿ ÇÔ¼ö¸¦ Á¦°øÇϱ⠶§¹®¿¡, Á÷Á¢ ¹®ÀÚ¿ ÇÔ¼ö¸¦ ¾²±â À§ÇØ
¹®ÀÚ Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ Çʿ伺ÀÌ °ÅÀÇ ¾ø´Ù.
¶ÇÇÑ, C++ ÇÁ·Î±×·¡¸Ó´Â Ç×»ó 'malloc'À̳ª 'free'´ë½Å 'new', 'delete'¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. µÎ ¹®ÀÚ¿ Ŭ·¡½º´Â
char * ³ª char []°¡ ÇÒ ¼ö ÀÖ´Â ¸ðµç ÀÏÀ»
ÇÒ ¼ö ÀÖ´Ù.
±×¸®°í ´õ ÁÁÀº Á¡Àº ¸Þ¸ð¸® ¹®Á¦³ª ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ ÀüÇô °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù.
ISO¿Í ANSI¿¡ ÀÇÇØ äÅÃµÈ ÇöÀçÀÇ C++ Ç¥ÁØÀº 1997³â¿¡ óÀ½ ¿Ï¼ºµÇ¾ú´Ù.
¾ÆÁ÷ ¸ðµç ÄÄÆÄÀÏ·¯°¡ À̸¦ µû¸£°í ÀÖÁö ¾Ê°í, ¸ðµç Ư¡µéÀÌ ´Ù Áö¿øµÇÁö´Â
¾Ê´Â ´Ù´Â °ÍÀÌ´Ù. - Ç¥ÁØ¿¡ ¸Â´Â ÄÄÆÄÀÏ·¯¸¦ ¾²´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù.
MS Windows´Â C++°³¹ß·Î ²Ï À¯¸íÇϱ⠶§¹®¿¡, ÀÌ ¹®¼¿¡ ÁÖ¾îÁø String class
¶óÀ̺귯°¡ Àß ÀÛµ¿Çϰí, Windows XP/2000/NT/95/98/ME µî ¸ðµç ¹öÀü¿¡¼ Àß
ÀÛµ¿ÇÑ´Ù.
MS Windows¸¦ À§ÇÑ C++ ÄÄÆÄÀÏ·¯ :
ÀÌ ¹®¼ÀÇ String Ŭ·¡½º´Â À§¿¡ ¾ð±ÞµÈ ¸ðµç ÄÄÆÄÀÏ·¯·Î Å×½ºÆ® µÇ¾ú°í,
MS Visual C++ v6.0, Borland C++ v5.2, Borland C++ v5.5.1, Bloodshed ÄÄÆÄÀÏ·¯¿¡¼
Àß µ¿ÀÛÇÑ´Ù.
GNU ¼¼°è¿¡¼´Â GCC(GNU Compiler Collection)¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº ¼±ÅÃÀÌ´Ù.
GCC´Â ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇ, FreeBSD, ±âŸ Unix Ŭ·Ðµé¿¡ µé¾îÀÖ´Ù.
GCC ȨÆäÀÌÁö´Â http://gcc.gnu.orgÀÌ´Ù.
ÃֽŹöÀüÀÇ GCC(3.0)Àº °¡Àå Ç¥ÁØÀ» Àß ÁؼöÇÑ ÄÄÆÄÀÏ·¯ Áß ÇϳªÀÌ´Ù.
¹®ÀÚ¿ class´Â ÇÁ·Î±×·¡¹Ö¿¡¼ °¡Àå Áß¿äÇÑ °Íµé Áß ÇϳªÀ̰í, ¹®ÀÚ¿ Á¶Á¤À»
À§ÇØ ¸Å¿ì ¸¹ÀÌ ¾²ÀδÙ.
¹®ÀÚ¿ class´Â ¿©·¯°¡Áö°¡ ÀÖ°í, ¹°·Ð À̵éÀ» »ó¼Ó¹ÞÀ½À¸·Î½á ÀڽŸ¸ÀÇ
¹®ÀÚ¿ class¸¦ ¸¸µé ¼öµµ ÀÖ´Ù.
À§¿¡ ¸»ÇÑ °Í °°ÀÌ, Çϳª ȤÀº ¿©·¯ class¸¦ »ó¼Ó¹Þ¾Æ ÀڽŸ¸ÀÇ ¹®ÀÚ¿ class¸¦
¸¸µé ¼öµµ ÀÖ´Ù. ¿©±â¼´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ string class¿Í ºÎ·Ï AÀÇ
String class ¸¦ »ó¼Ó¹ÞÀ½À¸·Î½á ´ÙÁß»ó¼ÓÀ» ÀÌ¿ëÇÑ ¹®ÀÚ¿ class¸¦ ¸¸µé¾î º¼
°ÍÀÌ´Ù. ¿ì¼± ¿¹Á¦ ÆÄÀÏ 'string_multi.h'¸¦ 23절 ¿¡¼ ´Ù¿î·Îµå ¹Þ¾Æ¶ó. ÀÌ ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù :
// ******************************************************************
// String class¿Í Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ "string" class¸¦ »ó¼Ó¹ÞÀ½À¸·Î½á
// Á÷Á¢ ¹®ÀÚ¿ class¸¦ ¸¸µé¾îº¸´Â ¿¹½Ã¸¦ À§ÇÑ ÇÁ·Î±×·¥
// ******************************************************************
#ifndef __STRING_MULTI_H_ALDEV_
#define __STRING_MULTI_H_ALDEV_
#include <string>
#include "String.h"
#include "StringBuffer.h"
#ifdef NOT_MSWINDOWS
#else
using namespace std; // MS Visual C++ compiler Version 6.0 ¿¡¼ ÇÊ¿äÇÔ.
#endif
// Áß¿ä! : C++¿¡¼´Â »ý¼ºÀÚ, ÆÄ±«ÀÚ, º¹»ç ¿¬»êÀÚ°¡ °°ÀÌ »ó¼ÓµÇÁö ¾Ê´Â´Ù.
// µû¶ó¼ ¸¸¾à =, + µîÀÇ ¿¬»êÀÚ°¡ base class¿¡ Á¤ÀǵǾî ÀÖ°í, base
// classÀÇ »ý¼ºÀÚ¸¦ ÀÌ¿ëÇÑ´Ù¸é, ¹Ýµå½Ã °°Àº ¿ªÇÒÀ» ÇÏ´Â »ý¼ºÀÚ¸¦
// »ó¼Ó¹Þ´Â class¿¡µµ ¸¸µé¾îÁÖ¾î¾ß ÇÑ´Ù.
// ¾Æ·¡¿¡ ÁÖ¾îÁø mystring(), mystring(char [])¸¦ º¸¾Æ¶ó.
//
// ¶ÇÇÑ atmpstrÀÌ mystringÀ¸·Î ¼±¾ðµÇ¾ú´Ù°í ÇÒ ¶§, atmpstr + mstr
// °ú °°ÀÌ ¿¬»êÀÚ¸¦ ¾µ ¶§, ½ÇÁ¦·Î ºÒ¸®´Â °ÍÀº atmpstr.operator+(mstr)ÀÌ´Ù.
class mystring:public String, string
{
public:
mystring():String() {} // =, + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(char bb[]):String(bb) {} // =, + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(char bb[], int start, int slength):String(bb, start, slength) {}
mystring(int bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(unsigned long bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(long bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(float bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(double bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(const String & rhs):String(rhs) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÑ Copy Constructor
mystring(StringBuffer sb):String(sb) {} // Java¿ÍÀÇ È£È¯À» À§ÇØ
mystring(int bb, bool dummy):String(bb, dummy) {} // StringBuffer class¸¦ À§ÇØ
int mystraa; // mystringÀÇ ÃÖÀûÈ
private:
int mystrbb; // mystringÀÇ ÃÖÀûÈ
};
#endif // __STRING_MULTI_H_ALDEV_ |
¸ðµç ÇÁ·Î±×·¥°ú ¿¹Á¦´Â ÀÌ ¹®¼ÀÇ ºÎ·Ï¿¡ ÁÖ¾îÁø´Ù.
String class¿Í ¶óÀ̺귯¸®, ¿¹Á¦ ÇÁ·Î±×·¥À» ÇϳªÀÇ tar zip ¾ÐÃàÆÄÀÏ·Î
¹¾î³õÀº ¸µÅ©°¡ ´ÙÀ½°ú °°´Ù.
Ȥ String class¸¦ ¹ÏÀ» ¼ö ¾øÀ» ¼öµµ ÀÖ´Ù.
À̸¦ ÇØ°áÇϱâ À§ÇØ, ÀúÀÚÀÇ String class¸¦ °ËÁõÇÒ °úÇÐÀûÀÎ ¹æ¹ýÀÌ ÀÖ´Ù.
Çö´ë ÄÄÇ»ÅÍ °øÇÐÀÚµéÀº ¼ÒÇÁÆ®¿þ¾î¸¦ °ËÁõÇϱâ À§ÇØ ¸Ó¸®°¡ ¾Æ´Ñ CPU¸¦ ¾´´Ù.
»ç¶÷ÀÇ ¸Ó¸®´Â ³Ê¹« ´À¸®±â ¶§¹®¿¡ Å×½ºÆ®¿Í °ËÁõÀ» À§Çؼ´Â ÄÄÇ»ÅÍÀÇ ÈûÀ»
ºô¸®´Â °ÍÀÌ ÁÁ´Ù. ÇÁ·Î±×·¥
example_String.cpp
À¸·Î °¡¼ 'Source code for C++' ¸¦ ¼±ÅÃÇØ¶ó.
( ºÎ·Ï A ¿¡µµ ÁÖ¾îÁø´Ù.
23절
) À§ ÇÁ·Î±×·¥Àº ¼ö¹é¸¸¹øÀÇ Å×½ºÆ®¸¦ ÀÚµ¿À¸·Î ÇÒ ¼ö ÀÖ´Â Å×½ºÆ® ¸ðµâÀ»
°®°í ÀÖ´Ù. String class¿¡ ÀÌ Å×½ºÆ®¸¦ ÇØº»´Ù¸é, String class°¡
°ß°íÇϰí
¿Ïº®ÇÑ ÇÁ·Î±×·¥ÀÓÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. Á÷Á¢ 50000¹Ýº¹À¸·Î Å×½ºÆ® ÇØº¸¾Ò´õ´Ï
¿À·ù¾øÀÌ Àß µ¿ÀÛÇÏ¿´´Ù.
¶ÇÇÑ, ¾î¶°ÇÑ ¸Þ¸ð¸® ¸¯µµ ¹ß°ßÇÒ ¼ö ¾ø¾ú´Ù.
Å×½ºÆ®´Â ¸®´ª½º¿¡¼ /usr/bin/gtop, UNIX top ¸í·É¾î,
KDEStart->System->KDE System Guard
and KDEStart->System->Process management µîÀ» »ç¿ëÇÏ¿© cpu¿Í ¸Þ¸ð¸®¸¦
üũÇϸç ÀÌ·ç¾îÁ³´Ù. ³ª´Â ¹Ýº¹È½¼ö ¸¦ õ¸¸¹øÀ̳ª ±× ÀÌ»óÀ¸·Î ³õ°í Å×½ºÆ®
ÇØº¸±â¸¦ ÃßõÇÑ´Ù. ¹Ýº¹È½¼ö°¡ Ŭ¼ö·Ï ½Å·Ú¼ºÀº ´õ¿í ³ô¾ÆÁú °ÍÀÌ´Ù!!
Å×½ºÆ®¸¦ µ¹·Á³õ°í ¹äÀ» ¸ÔÀ¸·¯ ´Ù³à¿À¸é °á°ú¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù!!
ÀÌ 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'¸¦ »ç¿ëÇϱâ À§Çؼ´Â, ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇ϶ó.
´ÙÀ½¿¡ ÁÖ¾îÁø ¿¹Á¦ Äڵ带 º¸¶ó.
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'
´Â ¾Æ·¡¿Í °°Àº ¿¬»êÀÚ¸¦ Á¦°øÇÑ´Ù :-
¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¿¹Á¦¸¦ º¸ÀÚ.
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";
// .....
} |
example_String.cpp
¿¡ °¡¼ 'Source code for C++'À» ¼±ÅÃÇØ¶ó.
´Ù¸¥ °°Àº À̸§À» °¡Áø 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°¡ ¿À°Ô µÈ´Ù.
C++°ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ °°ÀÌ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Óµé¿¡°Ô´Â ÀÌ ¹®ÀÚ¿ class°¡ ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù. C++ (ȤÀº ´Ù¸¥ °´Ã¼ÁöÇâ ¾ð¾î)¿¡¼´Â, "class µ¥ÀÌÅͱ¸Á¶"(ȤÀº ÀÎÅÍÆäÀ̽º)
¸¸ ÀÐÀ¸¸é ±× class¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÎÅÍÆäÀ̽º¸¸ ÀÌÇØÇÏ¸é µÇÁö, ÀÎÅÍÆäÀ̽ºÀÇ
±¸Çö±îÁö´Â ¾Ë Çʿ䰡 ¾ø´Â °ÍÀÌ´Ù.
String classÀÇ °æ¿ì, String.h ÆÄÀÏ¿¡ ÀÖ´Â String class¸¸ Àаí ÀÌÇØÇÏ¸é µÈ´Ù.
String class¸¦ ¾²±â À§ÇØ ±¸Çö(String.cpp)À» ¸ðµÎ
ÀÐÀ» ÇÊ¿ä´Â ¾ø´Â °ÍÀÌ´Ù.
°´Ã¼ÁöÇâ classµéÀº ½Ã°£À» Àý¾àÇÏ°Ô ÇØÁÖ°í, ±¸ÇöÀÇ ³»¿ëÀ»
±³¹¦ÇÏ°Ô ¼û°ÜÁØ´Ù. ( °´Ã¼ÁöÇâÀÎ Java¿¡µµ ÀÌ¿Í °°Àº ¿ªÇÒÀ» ÇÏ¿© ±¸Çö ³»¿ëÀ» ¼û°ÜÁÖ´Â
'interface' ¶õ °ÍÀÌ ÀÖ´Ù. ) ¾Æ·¡ÀÇ ³»¿ëÀº String.h ÆÄÀÏÀ̰í,
23절À» Âü°íÇØ¶ó.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
// string class³ª String class¸¦ ½á¶ó.
//
// ¸Þ¸ð¸® ¸¯À» ¸·±â À§ÇØ - ¹®ÀÚ º¯¼ö¸¦ °ü¸®Çϱâ À§ÇÑ ¹®ÀÚ class
// char[]³ª char *º¸´Ù´Â String class³ª string class¸¦ ½á¶ó.
//
#ifndef __STRING_H_ALDEV_
#define __STRING_H_ALDEV_
// ÇÁ·Î±×·¥ÀÌ Ä¿Áú ¼ö·Ï iostreamÀ» »ç¿ëÇÏÁö ¸»¾Æ¶ó.
#ifdef NOT_MSWINDOWS
#include <iostream>
#else
#include <iostream.h> // ÇÏÀ§È£È¯¼ºÀ» À§ÇØ. C++ Ç¥ÁØÀº .h°¡ ¾ø´Ù.
#endif // NOT_MSWINDOWS
#include <stdio.h> // File°ú sprintf()¸¦ À§ÇØ
//#include <list.h> // list
// MS Windows 95 VC++°ú Borland C++ ÄÄÆÄÀÏ·¯ÀÎ °æ¿ì -
// d:\program files\CBuilder\include\examples\stdlib\list.cpp ¿Í include\list.h
// À» º¸¶ó.
//#include <list> // for list
//using namespace std;
const short INITIAL_SIZE = 50;
const short NUMBER_LENGTH = 300;
const int MAX_ISTREAM_SIZE = 2048;
//class StringBuffer;
// ³ª´Â ÀÌ ¹®ÀÚ¿ class¸¦ Linux (Redhat 7.1)¿Í MS Windows Borland C++ v5.2 (win32)
// ¿¡¼ ÄÄÆÄÀÏ / Å×½ºÆ® ÇØº¸¾Ò´Ù.
// ¶ÇÇÑ, MS Visual C++ compiler¿¡¼µµ ÀÛµ¿ÇÒ °ÍÀÌ´Ù.
class String
{
public:
String();
String(const char bb[]); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(const char bb[], int start, int slength); // ¹®ÀÚµéÀÇ ºÎºÐÁýÇÕ
String(int bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(unsigned long bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(long bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(float bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(double bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(const String & rhs); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÑ copy constructor
//String(StringBuffer sb); // Java¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ
// - ±×·¯³ª MS windows¿¡¼´Â
// ÄÄÆÄÀϵÇÁö ¾Ê°í, core dump¸¦ ÀÏÀ¸Å²´Ù.
String(int bb, bool dummy); // StringBuffer class¸¦ À§ÇØ ÇÊ¿ä
virtual ~String(); // virtual·Î ¼±¾ðÇÏ¿© »ó¼Ó¹ÞÀº classÀÇ ¼Ò¸êÀÚ°¡
// ºÒ¸®µµ·Ï ÇÑ´Ù.
char *val() {return sval;} // svalÀ» publicÀ¸·Î ÇÏ´Â °ÍÀº À§ÇèÇϹǷÎ
// JavaÀÇ StringÀ» Èä³»³½ ÇÔ¼öµé
unsigned long length();
char charAt(int where);
void getChars(int sourceStart, int sourceEnd,
char target[], int targetStart);
char* toCharArray();
char* getBytes();
bool equals(String str2); // == ¿¬»êÀÚ¸¦ ÂüÁ¶Ç϶ó
bool equals(char *str2); // == ¿¬»êÀÚ¸¦ ÂüÁ¶Ç϶ó
bool equalsIgnoreCase(String str2);
bool regionMatches(int startIndex, String str2,
int str2StartIndex, int numChars);
bool regionMatches(bool ignoreCase, int startIndex,
String str2, int str2StartIndex, int numChars);
String toUpperCase();
String toLowerCase();
bool startsWith(String str2);
bool startsWith(char *str2);
bool endsWith(String str2);
bool endsWith(char *str2);
int compareTo(String str2);
int compareTo(char *str2);
int compareToIgnoreCase(String str2);
int compareToIgnoreCase(char *str2);
int indexOf(char ch, int startIndex = 0);
int indexOf(char *str2, int startIndex = 0);
int indexOf(String str2, int startIndex = 0);
int lastIndexOf(char ch, int startIndex = 0);
int lastIndexOf(char *str2, int startIndex = 0);
int lastIndexOf(String str2, int startIndex = 0);
String substring(int startIndex, int endIndex = 0);
String replace(char original, char replacement);
String replace(char *original, char *replacement);
String trim(); // ¿À¹ö·Îµù µÈ trimÀ» ÂüÁ¶Ç϶ó.
String concat(String str2); // + ¿¬»êÀÚ¸¦ ÂüÁ¶
String concat(char *str2); // + ¿¬»êÀÚ¸¦ ÂüÁ¶
String concat(int bb);
String concat(unsigned long bb);
String concat(float bb);
String concat(double bb);
String reverse(); // ¿À¹ö·Îµù µÈ ´Ù¸¥ reverse()¸¦ ÂüÁ¶
String deleteCharAt(int loc);
String deleteStr(int startIndex, int endIndex); // JavaÀÇ "delete()"
String valueOf(char ch)
{char aa[2]; aa[0]=ch; aa[1]=0; return String(aa);}
String valueOf(char chars[]){ return String(chars);}
String valueOf(char chars[], int startIndex, int numChars);
String valueOf(bool tf)
{if (tf) return String("true"); else return String("false");}
String valueOf(int num){ return String(num);}
String valueOf(long num){ return String(num);}
String valueOf(float num) {return String(num);}
String valueOf(double num) {return String(num);}
// ÀÌ ÆÄÀÏÀÇ ¾Æ·¡¿¡ ÁÖ¾îÁø StringBuffer¸¦ Âü°íÇ϶ó.
// ---- ¿©±â±îÁö Java¸¦ Èä³»³½ ÇÔ¼öµé -----
//////////////////////////////////////////////////////
// Java¿¡´Â ¾ø´Â Ãß°¡ÀûÀÎ ÇÔ¼öµé
//////////////////////////////////////////////////////
String ltrim();
void ltrim(bool dummy); // Á÷Á¢ÀûÀ¸·Î object¸¦ º¯È½ÃŲ´Ù.
String rtrim();
void rtrim(bool dummy); // Á÷Á¢ÀûÀ¸·Î object¸¦ º¯È½ÃŲ´Ù.
// chopall Âü°í.
void chopall(char ch='\n'); // ¸Ç µÚÀÇ ch¸¦ ¾ø¾Ø´Ù. rtrim Âü°í.
void chop(); // ¸Ç µÚÀÇ ¹®ÀÚ¸¦ ¾ø¾Ø´Ù.
void roundf(float input_val, short precision);
void decompose_float(long *integral, long *fraction);
void roundd(double input_val, short precision);
void decompose_double(long *integral, long *fraction);
void explode(char *separator); // token()°ú ¿À¹ö·Îµù µÈ explode()ÂüÁ¶
String *explode(int & strcount, char separator = ' '); // token()ÂüÁ¶
void implode(char *glue);
void join(char *glue);
String repeat(char *input, unsigned int multiplier);
String tr(char *from, char *to); // characterµéÀ» ¹Ù²Û´Ù(translate).
String center(int padlength, char padchar = ' ');
String space(int number = 0, char padchar = ' ');
String xrange(char start, char end);
String compress(char *list = " ");
String left(int slength = 0, char padchar = ' ');
String right(int slength = 0, char padchar = ' ');
String overlay(char *newstr, int start = 0, int slength = 0, char padchar = ' ');
String at(char *regx); // regxÀÇ Ã¹¹øÂ° match
String before(char *regx); // regx ¾ÕÀÇ string
String after(char *regx); // regx µÚÀÇ string
String mid(int startIndex = 0, int length = 0);
bool isNull();
bool isInteger();
bool isInteger(int pos);
bool isNumeric();
bool isNumeric(int pos);
bool isEmpty(); // length() == 0 °ú °°Àº »óÅÂ
bool isUpperCase();
bool isUpperCase(int pos);
bool isLowerCase();
bool isLowerCase(int pos);
bool isWhiteSpace();
bool isWhiteSpace(int pos);
bool isBlackSpace();
bool isBlackSpace(int pos);
bool isAlpha();
bool isAlpha(int pos);
bool isAlphaNumeric();
bool isAlphaNumeric(int pos);
bool isPunct();
bool isPunct(int pos);
bool isPrintable();
bool isPrintable(int pos);
bool isHexDigit();
bool isHexDigit(int pos);
bool isCntrl();
bool isCntrl(int pos);
bool isGraph();
bool isGraph(int pos);
void clear();
int toInteger();
long parseLong();
double toDouble();
String token(char separator = ' '); // StringTokenizer¿Í explode()¸¦ ÂüÁ¶
String crypt(char *original, char *salt);
String getline(FILE *infp = stdin); // putline() ÂüÁ¶
//String getline(fstream *infp = stdin); // putline() ÂüÁ¶
void putline(FILE *outfp = stdout); // getline() ÂüÁ¶
//void putline(fstream *outfp = stdout); // getline() ÂüÁ¶
void swap(String aa, String bb); // aa¸¦ bb·Î ¹Ù²Û´Ù
String *sort(String aa[]); // StringÀÇ array¸¦ sortÇÑ´Ù
String sort(int startIndex = 0, int length = 0); // string ³»ÀÇ characterµéÀ» sort
int freq(char ch); // ch°¡ µé¾îÀִ Ƚ¼ö¸¦ ¼¾´Ù
void Format(const char *fmt, ...);
String replace (int startIndex, int endIndex, String str);
void substring(int startIndex, int endIndex, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
void reverse(bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String deleteCharAt(int loc, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String deleteStr(int startIndex, int endIndex, bool dummy);
void trim(bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(int index, String str2);
String insert(int index, String str2, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(int index, char ch);
String insert(int index, char ch, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(char *newstr, int start = 0, int length = 0, char padchar = ' ');
String dump(); // od -c ¿Í °°ÀÌ stringÀ» dumpÇÑ´Ù.
// JavaÀÇ StringBuffer¸¦ À§ÇØ ÇÊ¿äÇÑ °Íµé
void ensureCapacity(int capacity);
void setLength(int len);
void setCharAt(int where, char ch); // charAt(), getCharAt() Âü°í
// JavaÀÇ Integer class, Long, Double class¸¦ À§ÇØ ÇÊ¿ä
int parseInt(String ss) {return ss.toInteger();}
int parseInt(char *ss)
{String tmpstr(ss); return tmpstr.toInteger();}
long parseLong(String ss) {return ss.parseLong();}
long parseLong(char *ss)
{String tmpstr(ss); return tmpstr.parseLong();}
float floatValue() {return (float) toDouble(); }
double doubleValue() {return toDouble(); }
char * number2string(int bb); // String(int) Âü°í
char * number2string(long bb); // String(long) Âü°í
char * number2string(unsigned long bb); // String(long) Âü°í
char * number2string(double bb); // String(double) Âü°í
///////////////////////////////////////////////
// °ãÄ¡´Â ÇÔ¼ö À̸§µé
///////////////////////////////////////////////
// char * c_str() // val() À» ´ë½Å»ç¿ë
// bool find(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// bool search(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// bool matches(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// int rindex(String str2, int startIndex = 0); lastIndexOf() À» ´ë½Å»ç¿ë
// String blanks(int slength); // repeat() ¸¦ ´ë½Å»ç¿ë
// String append(String str2); // concat() À̳ª + operator À» ´ë½Å»ç¿ë
// String prepend(String str2); // + operatorÀ» ´ë½Å»ç¿ë append()Âü°í
// String split(char separator = ' '); // token(), explode() ³ª StringTokenizer class ¸¦ ´ë½Å»ç¿ë
bool contains(char *str2, int startIndex = 0); // indexOf() ¸¦ ´ë½Å»ç¿ë
// void empty(); is_empty() ¸¦ ´ë½Å»ç¿ë
// void vacuum(); clear() ¸¦ ´ë½Å»ç¿ë
// void erase(); clear() ¸¦ ´ë½Å»ç¿ë
// void zero(); clear() ¸¦ ´ë½Å»ç¿ë
// bool is_float(); is_numeric(); À» ´ë½Å»ç¿ë
// bool is_decimal(); is_numeric(); À» ´ë½Å»ç¿ë
// bool is_Digit(); is_numeric(); À» ´ë½Å»ç¿ë
// float float_value(); toDouble(); À» ´ë½Å»ç¿ë
// float tofloat(); toDouble(); À» ´ë½Å»ç¿ë
// double double_value(); toDouble(); À» ´ë½Å»ç¿ë
// double numeric_value(); toDouble(); À» ´ë½Å»ç¿ë
// int int_value(); toInteger() ¸¦ ´ë½Å»ç¿ë
// int tonumber(); toInteger() ¸¦ ´ë½Å»ç¿ë
// String get(); substring() À̳ª val() À» ´ë½Å »ç¿ë. ±×·¯³ª Java ½ºÅ¸ÀÏÀÇ substringÀÌ ´õ ÁÁ´Ù
// String getFrom(); substring() À̳ª val() À» ´ë½Å »ç¿ë. ±×·¯³ª Java ½ºÅ¸ÀÏÀÇ substringÀÌ ´õ ÁÁ´Ù
// String head(int len); substring(0, len) À» ´ë½Å»ç¿ë
// String tail(int len); substring(length()-len, length()) ¸¦ ´ë½Å»ç¿ë
// String cut(); deleteCharAt() À̳ª deleteStr() À» ´ë½Å»ç¿ë
// String cutFrom(); deleteCharAt() À̳ª deleteStr() À» ´ë½Å»ç¿ë
// String paste(); insert() ¸¦ ´ë½Å»ç¿ë
// String fill(); replace() ¸¦ ´ë½Å»ç¿ë
// char firstChar(); // substring(0, 1); À» ´ë½Å»ç¿ë
// char lastChar(); // substring(length()-1, length()); ¸¦ ´ë½Å»ç¿ë
// String findNext(); token(), explode() À̳ª StringTokenizer class ¸¦ ´ë½Å»ç¿ë
// begin(); iterator. operator [ii]¸¦ ´ë½Å»ç¿ë
// end(); iterator. operator [ii]¸¦ ´ë½Å»ç¿ë
// copy(); assignment = ¿¬»ê´Ù¸¦ ´ë½Å »ç¿ë, String aa = bb;
// clone(); assignment = ¿¬»êÀÚ¸¦ ´ë½Å »ç¿ë, String aa = bb;
// void putCharAt(int where, char ch); setCharAt() À» ´ë½Å»ç¿ë
// void replaceCharAt(int where, char ch); setCharAt() À» ´ë½Å»ç¿ë
// char getCharAt(int where); CharAt() À» ´ë½Å»ç¿ë
// void parseArgs(int where, char ch); StringTokensizer class, token() À̳ª explode() ¸¦ ´ë½Å»ç¿ë
// void truncate(); trim(), rtrim(), chop() À̳ª chopall() À» ´ë½Å»ç¿ë
// ¼ýÀÚ¸¦ stringÀ¸·Î º¯È¯ : notostring(), int2str, long2strÀº number2string()À» »ç¿ë
// ¿¬»êÀÚµé...
String operator+ (const String & rhs);
friend String operator+ (const String & lhs, const String & rhs);
String& operator+= (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
String& operator= (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
bool operator== (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
bool operator== (const char *rhs);
bool operator!= (const String & rhs);
bool operator!= (const char *rhs);
char operator [] (unsigned long Index) const;
char& operator [] (unsigned long Index);
friend ostream & operator<< (ostream & Out, const String & str2);
friend istream & operator>> (istream & In, String & str2);
bool String::operator< (const char *rhs) const; // map & vector ¸¦ À§ÇÑ À¯¿ëÇÑ method
bool String::operator< (const String & rhs) const; // map & vector ¸¦ À§ÇÑ À¯¿ëÇÑ method
//do later: static list<String> explodeH; // list head
protected:
char *sval; // svalÀ» publicÀ¸·Î ÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù.
void verifyIndex(unsigned long index) const; // Win32¿¡¼ÀÇ warning¶§¹®¿¡ inlineÀÌ ¾Æ´Ï´Ù.
void verifyIndex(unsigned long index, char *aa) const;// Win32¿¡¼ÀÇ warning¶§¹®¿¡ inlineÀÌ ¾Æ´Ï´Ù.
void _str_cat(char bb[]);
void _str_cat(int bb);
void _str_cat(unsigned long bb);
void _str_cat(float bb);
void _str_cpy(char bb[]);
void _str_cpy(int bb); // itoa
void _str_cpy(unsigned long bb);
void _str_cpy(float bb); // itof
private:
// Note: ¸ðµç private º¯¼ö¿Í ÇÔ¼ö´Â _ (¹ØÁÙ)·Î ½ÃÀÛÇÑ´Ù.
//static String *_global_String; // add ¿¬»ê¿¡¼ ÇÊ¿ä
//inline void _free_glob(String **aa);
bool _equalto(const String & rhs, bool type = false);
bool _equalto(const char *rhs, bool type = false);
String *_pString; // ³»ºÎ¿¡¼ »ç¿ëÇÏ´Â Àӽà Æ÷ÀÎÅÍ
char *_pNumber2String; // ³»ºÎ¿¡¼ »ç¿ëÇÏ´Â Àӽà Æ÷ÀÎÅÍ
inline void _allocpString();
inline void _allocpNumber2String();
inline void Common2AllCstrs();
inline void _reverse();
inline void _deleteCharAt(int loc);
inline void _deleteStr(int startIndex, int endIndex);
inline void _trim();
inline void _ltrim();
inline void _rtrim();
inline void _substring(int startIndex, int endIndex);
void _roundno(double input_dbl, float input_flt, short precision, bool type);
};
// Àü¿ªº¯¼ö´Â String.cpp ¿¡¼ Á¤ÀǵȴÙ
#endif // __STRING_H_ALDEV_ |
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ stringbuffer class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
//
#ifndef __STRINGBUFFER_H_ALDEV_
#define __STRINGBUFFER_H_ALDEV_
// JavaÀÇ StringBuffer ¸¦ ¸ð¹æÇÑ °Í
// ÀÌ class´Â JavaÀÇ code¸¦ ÃÖ¼ÒÇÑÀÇ ¼öÁ¤¸¸À¸·Îµµ
// C++¿¡¼ µ¿ÀÛÇϵµ·Ï Çϱâ À§ÇØ ¸¸µé¾îÁ³´Ù.
// Note: C++·Î ÄÚµùÇÏ´Â µ¿¾ÈÀº ÀÌ StringBuffer
// class¸¦ *¾²Áö ¸»¾Æ¶ó*.
// ÀÌ class´Â ¿ÀÁ÷ Java Äڵ带 cut/pasteÇÏ´Â °æ¿ì¸¦
// À§Çؼ ¾²¿©Áø °ÍÀÌ´Ù.
class StringBuffer: public String
{
public:
StringBuffer();
~StringBuffer();
StringBuffer(char *aa);
StringBuffer(int size);
StringBuffer(String str);
int capacity();
StringBuffer append(String str2);
// operator + ÂüÁ¶
//{ *this += str2; return *this;} // ÀÌ code´Â core dump¸¦ ÀÏÀ¸Å²´Ù
StringBuffer append(char *str2);
StringBuffer append(int bb);
StringBuffer append(unsigned long bb) ;
StringBuffer append(float bb) ;
StringBuffer append(double bb) ;
StringBuffer insert(int index, String str2);
StringBuffer insert(int index, char ch);
StringBuffer reverse();
// JavaÀÇ "delete()"¿¡ ÇØ´ç. (delete´Â C++ÀÇ keywordÀ̹ǷΠ»ç¿ëÇÏÁö ¸øÇÑ´Ù)
StringBuffer deleteStr(int startIndex, int endIndex);
StringBuffer deleteCharAt(int loc);
StringBuffer substring(int startIndex, int endIndex = 0);
void assign(char *str);
private:
StringBuffer *_pStringBuffer;
inline void allocpStringBuffer();
inline void Common2AllCstrs();
};
#endif // __STRINGBUFFER_H_ALDEV_ |
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ stringtokenizer class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
//
#ifndef __STRINGTOKENIZER_H_ALDEV_
#define __STRINGTOKENIZER_H_ALDEV_
// JavaÀÇ StringBuffer ¸¦ ¸ð¹æÇÑ °Í
// JavaÀÇ Äڵ带 C++¿¡¼ ȤÀº ±× ¹Ý´ë·Î ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ
// °¡´ÉÇÏ°Ô ¸¸µé¾îÁ³´Ù.
class StringTokenizer: public String
{
public:
StringTokenizer(String str);
StringTokenizer(String str, String delimiters);
StringTokenizer(String str, String delimiters, bool delimAsToken);
~StringTokenizer();
int countTokens();
bool hasMoreElements();
bool hasMoreTokens();
String nextElement(); // Java¿¡¼´Â "Object"typeÀ» returnÇÑ´Ù.
String nextToken();
String nextToken(String delimiters);
private:
int CurrentPosition; // ÇöÀç string¿¡¼ÀÇ index
int TotalTokens;
int RemainingTokens;
char * ListOfDl; // delimiters(±¸ºÐÀÚ)µéÀÇ list
char * WorkStr; // Àӽà ÀÛ¾÷ string
char * OrigStr; // Áö³ª¿Â original string
bool DlFlag; // ±¸ºÐÀÚÀÎÁö¸¦ ³ªÅ¸³»´Â flag
inline void vPrepWorkStr(char *delimiters = NULL);
};
#endif // __STRINGTOKENIZER_H_ALDEV_ |
À§¿¡ ¾ð±ÞµÈ String class (S°¡ ´ë¹®ÀÚÀÎ °Í¿¡ ÁÖÀÇ!)´Â Java¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀ»
À§ÇÑ °ÍÀÎ ¹Ý¸é, Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡¼ Á¦°øµÇ´Â "ÁøÂ¥" string class¸¦ ÁÖ¸ñÇÒ
Çʿ䰡 ÀÖ´Ù. string class´Â C¿¡¼ÀÇ °¡Àå Å« ¹®Á¦Á¡ Áß ÇϳªÀÎ ¹®ÀÚ¹è¿ÀÇ ´ÜÁ¡À» ±Øº¹Çϱâ À§ÇØ
¸¸µé¾îÁ³´Ù. ¹®ÀÚ¹è¿ÀÌ ¹«Ã´ ºü¸£±ä ÇÏÁö¸¸, ¸¹Àº ´ÜÁ¡À» °®°í ÀÖ´Ù.
¹®ÀÚ¹è¿Àº ¸¹Àº ¹ö±×ÀÇ ¿øÀÎÀ̰í, À̸¦ parsingÇÏ´Â ÀÏÀº ±²ÀåÈ÷ ±ÍÂúÀº ÀÏÀÌ´Ù. string class´Â ¹®ÀÚ¿À» ÆÄ½ÌÇϰí, Á¶Á¤Çϴµ¥ ÇÊ¿äÇÑ ÁÁÀº ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϰí,
STL°úµµ ȣȯ°¡´ÉÇÏ´Ù. Áï, ¸ðµç STLÀÇ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
½ÇÁ¦·Î ¹®ÀÚ¿Àº vector<char>
( ¹®ÀÚµéÀ» À§ÇÑ container ȤÀº Áøº¸µÈ ¹®ÀÚ¹è¿ )
·Î Ãë±ÞµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ »çÀÌÆ®¿¡¼ Âü°íÇÒ¸¸ÇÑ °ÍµéÀ» ¾òÀ» ¼ö ÀÖ´Ù:
stringÀ» ¸¸µå´Â °ÍÀº ½±´Ù.
Creating a string is easy:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str("Hello World!"); // ȤÀº string str = "Hello World!";
cout << str << endl;
}
|
ÀÌ ÄÚµå´Â "str'¶õ stringÀ» ¸¸µé°í, "Hello
World!' ¶ó´Â ³»¿ëÀ» ³ÖÀ» °ÍÀÌ´Ù.
±×¸®°í coutÀ» »ç¿ëÇÏ¿© Ç¥ÁØÃâ·Â(stdout)À¸·Î Ãâ·ÂÇÒ °ÍÀÌ´Ù.
(ÀÌÁ¦ºÎÅÍ ¸ðµç Çì´õ¿Í namespace °ü·ÃºÎºÐÀº »ý·«ÇÒ °ÍÀÌ´Ù.) ¹®ÀÚ¿ÀÇ ºÎºÐÀ» ±¸ÇÏ´Â °Í ¿ª½Ã ½±´Ù :
string str("Hello Universe!");
string start = str.substr(0, 5);
string end = str.substr(5); |
¿©±â¼´Â ù 6±ÛÀÚ¸¦ string "start"¿¡, ³ª¸ÓÁö´Â
"end"¿¡ µé¾î°¥ °ÍÀÌ´Ù. ¹®ÀÚ¿ÀÇ ±æÀ̸¦ ¾ò±â À§Çؼ´Â, ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
string str("How long is this string?");
cout << "Length of string is: " << str.size() << endl; |
ȤÀº ÀÌ¿Í Á¤È®È÷ ¶È°°Àº ¿ªÇÒÀ» ÇÏ´Â length() ¸¦ ½áµµ µÈ´Ù.
¹®ÀÚ¿À» ã´Â °ÍÀº ¹®Àڹ迺¸´Ù ÈξÀ ½±´Ù. string class´Â ¹®ÀÚ¿À» ã´Âµ¥
È¿À²ÀûÀÎ ¸â¹ö ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
¸ðµç ¸â¹öÇÔ¼ö´Â string::size_type À» returnÇÑ´Ù.
표 1. ¹®ÀÚ¿ °Ë»ö ¸â¹ö ÇÔ¼ö | ¸â¹ö ÇÔ¼ö | ÀÛµ¿ | | | find() | ÁÖ¾îÁø ºÎºÐ¹®ÀÚ¿ÀÌ Ã³À½À¸·Î ³ªÅ¸³ª´Â °÷À» ã´Â´Ù | | | find_first_of() | find()¿Í °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ óÀ½À¸·Î ³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù | | | find_last_of() | find first of()¿Í °°À¸³ª, ÁÖ¾îÁø ¹®ÀÚ°¡ ¸¶Áö¸·À¸·Î ³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù | | | find_first_not_of() | find first of() °ú °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ ¾Æ´Ñ ù ¹®ÀÚ°¡ óÀ½À¸·Î
³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù | | | find_last_not_of() | find last of() °ú °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¸¦ ã´Â´Ù. | | | rfind() | find()¿Í °°À¸³ª, ã´Â ¹æÇâÀÌ ¹Ý´ëÀÌ´Ù. (µÚÂʺÎÅÍ Ã£´Â´Ù) | | | | | |
°¡Àå ÈçÇÑ »óȲÀº ¹®ÀÚ¿À» ã´Â °ÍÀ̰í, ÀÌ´Â
find() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
string str("Hello, can you find Ben?");
string::size_type position = str.find("Ben");
cout << "First occurence of Ben was found at: " << position << endl; |
ÀÌ ÄÚµå´Â 'Ben'¿¡ ´ëÇØ ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â °Ë»öÀ» Çϰí,
½ÃÀÛÀ§Ä¡¸¦ 'position'¿¡ string::size_type ŸÀÔÀ¸·Î ³Ö´Â´Ù.
¸®ÅÏÇÏ´Â °ªÀÌ int°¡ ¾Æ´Ï¶ó Ưº°È÷ °í¾ÈµÈ string::size_type ŸÀÔÀ̶ó´Âµ¥ ÁÖÀÇÇ϶ó. find_first_of()
ÇÔ¼ö´Â ½ÇÁ¦ÀûÀÎ ¿¹°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
¾Æ·¡¿Í °°Àº »óȲÀ» º¸ÀÚ.
string s = "C++ is an impressive language.";
string::size_type pos = s.find_first_of(" .");
while (pos != string::npos) {
cout << "Found space or dot at: " << pos << endl;
pos = s.find_first_of(" .", pos + 1);
} |
find_first_of()ÇÔ¼ö¸¦ ¾²¸é,
¿ì¸®´Â ù¹øÂ° ÀÎÀÚÀÇ ¸ðµç ¹®ÀÚ¸¦ ã°Ô µÇ°í,
µû¶ó¼ ¿©±â¼´Â ½ºÆäÀ̽º(' ') ȤÀº Á¡('.')À» ã°Ô µÈ´Ù. ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇØ¼ ¾î¶»°Ô Ãâ·ÂµÇ´ÂÁö º¸¾Æ¶ó.
¹®ÀÚ¿À» °¡Áö°í ÀÚÁÖ ÇϰԵǴ ÀÛ¾÷ Áß Çϳª´Â, ¾î¶² ±¸ºÐÀÚ¸¦ °¡Áö°í ÅäÅ«µé·Î
³ª´©´Â °ÍÀÌ´Ù (tokenize). tokenizer´Â ¹®ÀÚ¿À» find()¸¦ °è¼Ó ºÎ¸£´Â ÀÏ ¾øÀÌ
½±°Ô Á¶±×¸¸ Á¶°¢µé·Î Âɰ¶ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. C¿¡¼´Â, ¾Æ¸¶µµ ¹®ÀÚ ¹è¿¿¡ ´ëÇØ
strtok() ¶õ ÇÔ¼ö¸¦ ½èÀ» °ÍÀÌÁö¸¸,
¹®ÀÚ¿¿¡ ´ëÇØ¼´Â ÀÌ·¯ÇÑ ÇÔ¼ö°¡ ¾ø´Ù. µû¶ó¼ Á÷Á¢ ÀÌ·± ÇÔ¼ö¸¦ ¸¸µé¾î¾ß °ÚÁö¸¸,
¸î°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù. The advanced tokenizer:
void Tokenize(const string& str,
vector<string>& tokens,
const string& delimiters = " ")
{
// ¸Ç ù ±ÛÀÚ°¡ ±¸ºÐÀÚÀÎ °æ¿ì ¹«½Ã
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// ±¸ºÐÀÚ°¡ ¾Æ´Ñ ù ±ÛÀÚ¸¦ ã´Â´Ù
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos)
{
// tokenÀ» ã¾ÒÀ¸´Ï vector¿¡ Ãß°¡ÇÑ´Ù
tokens.push_back(str.substr(lastPos, pos - lastPos));
// ±¸ºÐÀÚ¸¦ ¶Ù¾î³Ñ´Â´Ù. "not_of"¿¡ ÁÖÀÇÇ϶ó
lastPos = str.find_first_not_of(delimiters, pos);
// ´ÙÀ½ ±¸ºÐÀÚ°¡ ¾Æ´Ñ ±ÛÀÚ¸¦ ã´Â´Ù
pos = str.find_first_of(delimiters, lastPos);
}
} |
tokenizer´Â ´ÙÀ½°ú °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù.
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<string> tokens;
string str("Split me up! Word1 Word2 Word3.");
Tokenize(str, tokens);
copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, ", "));
} |
À§ÀÇ ÄÚµå´Â Tokenize ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹·Î¼, ù¹øÂ° ÀÎÀÚÀÎ
str¸¦ Âɰµ´Ù. ±×¸®°í ¿ì¸®°¡ ¼¼ ¹øÂ° ÀÎÀÚ¸¦ ÁÖÁö
¾Ê¾Ò±â ¶§¹®¿¡ µðÆúÆ®·Î ¼³Á¤µÈ " "(spacebar)¸¦ ±¸ºÐÀÚ·Î »ç¿ëÇÑ´Ù.
±×¸®°í ¸ðµç element´Â tokens º¤ÅÍ¿¡ µé¾î°¡°Ô µÉ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î Ç¥ÁØ Ãâ·Â¿¡ º¤ÅÍ Àüü¸¦ copy()ÇÔÀ¸·Î½á º¤ÅÍÀÇ ³»¿ëÀ» ȸéÀ¸·Î
º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶Ç´Ù¸¥ Á¢±Ù ¹æ¹ýÀº stringstreamÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. C++¿¡¼ streamÀº Ư¼öÇÑ
±â´ÉÀÌ Çϳª Àִµ¥, ÀÌ´Â °ø¹é(whitespace)¸¦ ¸¸³¯ ¶§±îÁö Àб⸦ °è¼ÓÇÑ´Ù´Â °ÍÀÌ´Ù.
µû¶ó¼ ¾Æ·¡ÀÇ ÄÚµå´Â °ø¹éÀ» ±âÁØÀ¸·Î ¹®ÀÚ¿À» ³ª´©°íÀÚ ÇÒ ¶§ Àß µ¿ÀÛÇÒ °ÍÀÌ´Ù.
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string str("Split me by whitespaces");
string buf; // ¹öÆÛ string
stringstream ss(str); // stringÀ» stream¿¡ ³Ö´Â´Ù
vector<string> tokens; // wordµéÀ» ³ÖÀ» vector
while (ss >> buf)
tokens.push_back(buf);
} |
ÀÌÁ¦ stringstreamÀº Ãâ·Â ¿¬»êÀÚ(>>)¸¦ »ç¿ë ÇÏ¿© ¹®ÀÚ¿À» buf
¿¡ °ø¹éÀ» ¸¸³¯ ¶§¸¶´Ù ³Ö´Â´Ù.
buf´Â À̸¦ Â÷·Ê´ë·Î º¤ÅÍ¿¡ push_back() ÇÑ´Ù.
±×¸®°í ÀÌÁ¦ tokens º¤ÅÍ´Â str ¿¡
µé¾îÀÖ´Â ¸ðµç ´Ü¾î¸¦ °®°Ô µÈ´Ù.
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ File class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù. ¿î¿µÃ¼Á¦ÀÇ ÆÄÀÏÀ» °ü¸®ÇÒ ¶§, File class°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ÀÌ class´Â
JavaÀÇ File class¸¦ ¸ð¹æÇÑ °ÍÀ¸·Î, C++ ÇÁ·Î±×·¡¹Ö¿¡¼ ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
C++¿¡¼ ÀÌ class¸¦ »ç¿ëÇϸé, ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö(exists()),
µð·ºÅ丮°¡ Á¸ÀçÇÏ´ÂÁö(exists()),
ÆÄÀÏÀÇ ±æÀÌ´Â ¾î¶²Áö(length()) µîÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ class°¡ Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡´Â ¾ø´Â ÁÁÀº ±â´ÉµéÀ» °®°í ÀÖ´Ù´Â µ¥ ÁÖ¸ñÇØ¶ó.
±×·¯³ª ¿©·¯°¡Áö ´Ù¸¥ µ¿ÀÛÀ» ÇØÁÖ¾î¾ß ÇÏ´Â fstreams(iostreams)°ú Çò°¥¸®Áö´Â ¸»¾Æ¶ó.
C¿¡¼´Â, ¸Þ¸ð¸®ÀÇ ÇÒ´ç°ú ÇØÁ¦¸¦ À§ÇØ malloc()°ú free()¸¦ ºñ·ÔÇÑ malloc()°è¿ÀÇ ÇÔ¼ö¸¦
¾²Áö¸¸, ´Ùµé ´ÜÁ¡À» °®°í ÀÖ´Ù.
±×·¡¼ C++ Àº ¸Þ¸ð¸®¸¦ ´Ù·ç±â À§ÇÑ ¿¬»êÀÚµéÀ» µµÀÔÇß°í, À̵éÀº
new ¿Í deleteÀÌ´Ù.
ÀÌ ¿¬»êÀÚµéÀº ½ÇÇà½Ã¿¡ Èü(heap - ȤÀº ÀÚÀ¯ °ø°£)À¸·ÎºÎÅÍ ¸Þ¸ð¸®¸¦ ÇÒ´ç, ÇØÁ¦ÇÑ´Ù. C++¿¡¼´Â Á¤¸»·Î ²À malloc()À̳ª free()¸¸À» ½á¾ßÇÏ´Â »óȲÀÌ ¾Æ´Ï¶ó¸é ¾ðÁ¦³ª
new ¿Í delete¸¦ ½á¾ßÇÑ´Ù.
±×·¯³ª ÁÖÀÇÇÒ Á¡Àº, ÀÌ µÎ °¡Áö¸¦ ¼¯¾î¼ ¾²¸é ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù.
malloc()À¸·Î ¾òÀº ¸Þ¸ð¸®¸¦ delete·Î ÇØÁ¦ÇÒ ¼ö´Â ¾ø°í, ¹Ý´ë·Î new·Î ¾òÀº ¸Þ¸ð¸®¸¦
free()½Ãų ¼öµµ ¾ø´Ù.
C++¿¡¼ÀÇ
delete ¿Í new
¿¬»êÀÚ´Â CÀÇ malloc, freeº¸´Ù ³´´Ù. µû¶ó¼ malloc°ú free ´ë½Å new¿Í zap(delete)¸¦
¾²µµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù. delete ¿¬»êÀÚ°¡ Á» ´õ ±ò²ûÇϰÔ
»ç¿ëµÇ°Ô ÇϱâÀ§ÇØ ´ÙÀ½°ú °°Àº Zap() inline ÇÔ¼ö¸¦ ¸¸µéÀÚ.
´ÙÀ½°ú °°ÀÌ zap()À» Á¤ÀÇÇÏÀÚ.
// x°¡ NULLÀÎÁö üũÇϱâ À§ÇØ assert¸¦ »ç¿ëÇÏ¿´´Ù.
// ÀÌ´Â ÇÁ·Î±×·¥ÀÇ "³í¸®Àû" ¿¡·¯¸¦ ¹Ì¸® Àâ¾Æ³»±â À§ÇÑ °ÍÀÌ´Ù.
// delete°¡ NULLÀÎ °æ¿ì¿¡µµ Àß µ¿ÀÛÇϱä ÇÏÁö¸¸, assert¸¦
// »ç¿ëÇÔÀ¸·Î½á Á» ´õ ÀÏÂï ¿¡·¯¸¦ Àâ¾Æ³¾ ¼ö ÀÖ´Ù.
// ZapÀ» templateÀ» »ç¿ëÇÏ¿© Á¤ÀÇÇÏÀÚ.
// delete´ë½Å zapÀ» »ç¿ëÇÏ¸é ´õ ±ò²ûÇÒ °ÍÀÌ´Ù.
template <class T>
inline void zap(T & x)
{
{assert(x != NULL);}
delete x;
x = NULL;
}
// C++¿¡ µÎ °¡Áö delete ¿¬»êÀÚÀÇ ¿ë¹ýÀÌ ÀÖ´Â ÀÌÀ¯´Â C++ ¿¡°Ô
// ÇÑ °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í °´Ã¼ÀÇ ¹è¿¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ±¸º°Çϵµ·Ï
// ¸»ÇØÁÖ´Â ¹æ¹ýÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
// delete¿¬»êÀÚ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô "[]"¸¦ ¾²°ÔÇÔÀ¸·Î½á À̸¦ ±¸º°ÇÑ´Ù.
// µû¶ó¼ ¿ì¸®´Â Æ÷ÀÎÅÍÀÇ ¹è¿À» Áö¿ì±â À§ÇÑ zaparr ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù
template <class T>
inline void zaparr(T & x)
{
{assert(x != NULL);}
delete [] x;
x = NULL;
} |
zap()ÇÔ¼ö´Â Æ÷ÀÎÅ͸¦ delete½Ã۰í NULL·Î ¼¼ÆÃÇÑ´Ù.
ÀÌ´Â ¶È°°Àº delete Æ÷ÀÎÅÍ¿¡ ´ëÇØ ¿©·¯¹øÀÇ zap()ÀÌ
ºÒ·Á¼ ÇÁ·Î±×·¥ÀÌ ¸Á°¡Áö´Â °ÍÀ» ¹æÁöÇÑ´Ù.
´ÙÀ½ÀÇ zap_example()ÇÔ¼ö¸¦ º¸¾Æ¶ó.
example_String.cpp
'Source code of C++'À» Ŭ¸¯Çضó.
// example_String.cpp¿¡¼ zap_example()¸¦ º¸¶ó.
zap(pFirstname);
//zap(pFirstname); // pFirstnameÀÌ NULLÀ̹ǷΠÄÚ¾î ´ýÇÁ°¡ ÀϾÁö ¾Ê´Â´Ù.
//zap(pFirstname); // pFirstnameÀÌ NULLÀ̹ǷΠÄÚ¾î ´ýÇÁ°¡ ÀϾÁö ¾Ê´Â´Ù.
zap(pLastname);
zap(pJobDescription);
int *iiarray = new int[10];
zaparr(iiarray); |
¹¹ Ưº°ÇÑ °ÍÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï°í, À̰ÍÀº ´ÜÁö ¹Ýº¹ÀûÀÎ Äڵ带 ÁÙÀ̰í
ŸÀÌÇÎÇÏ´Â ½Ã°£À» ¾Æ²¸ÁÖ¸ç ÇÁ·Î±×·¥À» Á» ´õ Àбâ ÁÁ°Ô ¸¸µé¾îÁÖ´Â °Í »ÓÀÌ´Ù.
C++ ÇÁ·Î±×·¡¸ÓµéÀº ÀÚÁÖ deleteÇÑ pointer¸¦ NULL·Î ¼¼ÆÃÇÏ´Â °ÍÀ» Àش´Ù.
±×¸®°í ÀÌ´Â ÄÚ¾î´ýÇÁ¿Í ¿ÀÀÛµ¿À¸·Î À̾îÁú ¼ö ÀÖ´Ù.
zap()Àº ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÀÚµ¿À¸·Î ó¸®ÇØÁØ´Ù.
zap()¿¡ ŸÀÔ Ä³½ºÆÃÀ» ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¸¸¾à À§ zap()ÇÔ¼ö¿¡¼ ¿¡·¯°¡ ³´Ù¸é,
´Ù¸¥ µ¥¼ ½ÃÀÛµÈ ¿¡·¯ÀÏ °ÍÀÌ´Ù. ¶ÇÇÑ
9.2절
, my_realloc() °ú my_free() ÀÌ
malloc(), realloc() ±×¸®°í free() ´ë½Å ¾²¿©¾ß ÇÑ´Ù.
À̵éÀº ÈξÀ ±ò²ûÇϰí, ¿©·¯°¡Áö üũµµ ÇØÁØ´Ù.
¿¹¸¦µé¾î,
9.2절 °ú
my_free() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â "String.h" ÆÄÀÏÀ» º¸¶ó. ÁÖÀÇ :
'new'·Î ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦Çϱâ À§ÇØ free()¸¦ ¾²°Å³ª, malloc()À¸·Î ÇÒ´çµÈ
¸Þ¸ð¸®¸¦ ÇØÁ¦Çϱâ À§ÇØ 'delete'¸¦ ¾²Áö ¸»¾Æ¶ó. ±×·¸Áö ¾ÊÀ¸¸é
°á°ú¸¦ ¿¹ÃøÇÒ ¼ö ¾ø´Â ¿¡·¯¿¡ ºüÁú °ÍÀÌ´Ù. example_String.cpp ¿¡¼ 'Source code of C++' ¸¦ Ŭ¸¯ÇÑ´ÙÀ½, zapÇÔ¼öÀÇ ¿¹¸¦ º¸¾Æ¶ó.
malloc°ú realloc À» ÃÖ´ëÇÑ »ç¿ëÇÏÁö ¸»°í, new ¿Í
9.1절(delete)À» »ç¿ëÇØ¶ó.
±×·¯³ª ¶§·Î´Â C++¿¡¼ C ½ºÅ¸ÀÏÀÇ ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇØ¾ß ÇÒ Çʿ䵵 ÀÖ´Ù.
ÀÌ ¶§´Â my_malloc() ,
my_realloc() ,
my_free() À» »ç¿ëÇØ¶ó.
ÀÌ ÇÔ¼öµéÀº ÀûÀýÇÑ ÇÒ´ç°ú Ãʱâȸ¦ ÇØÁÖ°í, ¸Þ¸ð¸® ¹®Á¦¸¦ ¿¹¹æÇØÁØ´Ù.
¶ÇÇÑ ÀÌ ÇÔ¼öµéÀº DEBUG¸ðµå¿¡¼ ¸Þ¸ð¸® ÇÒ´çÀ» ÃßÀûÇØÁÖ°í, ÇÁ·Î±×·¥ ½ÇÇà
ÀüÈÄ¿¡ ÃÑ ¸Þ¸ð¸® »ç¿ë·®À» Ç¥½ÃÇØÁØ´Ù. ÀÌ´Â ¸Þ¸ð¸® ¸¯ÀÌ ÀÖ´ÂÁö¸¦
¾Ë·ÁÁÙ °ÍÀÌ´Ù. my_malloc °ú my_reallocÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾú´Ù.
ÀÌ´Â ¾à°£ÀÇ ¸Þ¸ð¸®¸¦ ´õ ÇÒ´çÇØ¼ (SAFE_MEM = 5) ÃʱâȽÃ۰í,
¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾øÀ¸¸é ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
'call_check(), remove_ptr()' ÇÔ¼ö´Â DEBUG_MEM °¡ makefile¿¡¼
((void)0) (ÀÌ´Â NULLÀ» ÀǹÌÇÑ´Ù)À¸·Î ÁöÁ¤µÇ¾îÀÖÀ» ¶§¿¡¸¸ ÀÛµ¿ÇÑ´Ù.
ÀÌ´Â ÃÑ ¸Þ¸ð¸® »ç¿ë·®À» ÃßÀûÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
void *local_my_malloc(size_t size, char fname[], int lineno)
{
size_t tmpii = size + SAFE_MEM;
void *aa = NULL;
aa = (void *) malloc(tmpii);
if (aa == NULL)
raise_error_exit(MALLOC, VOID_TYPE, fname, lineno);
memset(aa, 0, tmpii);
call_check(aa, tmpii, fname, lineno);
return aa;
}
char *local_my_realloc(char *aa, size_t size, char fname[], int lineno)
{
remove_ptr(aa, fname, lineno);
unsigned long tmpjj = 0;
if (aa) // aa != NULL
tmpjj = strlen(aa);
unsigned long tmpqq = size + SAFE_MEM;
size_t tmpii = sizeof (char) * (tmpqq);
aa = (char *) realloc(aa, tmpii);
if (aa == NULL)
raise_error_exit(REALLOC, CHAR_TYPE, fname, lineno);
// do not memset memset(aa, 0, tmpii);
aa[tmpqq-1] = 0;
unsigned long kk = tmpjj;
if (tmpjj > tmpqq)
kk = tmpqq;
for ( ; kk < tmpqq; kk++)
aa[kk] = 0;
call_check(aa, tmpii, fname, lineno);
return aa;
} |
my_malloc ÀÇ ¸ðµç ±¸ÇöÀ» º¸·Á¸é
23절
¿¡¼
23절
ÀÇ Çì´õÆÄÀÏÀ» º¸¸é µÈ´Ù. my_malloc °ú my_free ¸¦ ¾²´Â ¿¹´Â ´ÙÀ½°ú °°´Ù.
char *aa;
int *bb;
float *cc;
aa = (char *) my_malloc(sizeof(char)* 214);
bb = (int *) my_malloc(sizeof(int) * 10);
cc = (float *) my_malloc(sizeof(int) * 20);
aa = my_realloc(aa, sizeof(char) * 34);
bb = my_realloc(bb, sizeof(int) * 14);
cc = my_realloc(cc, sizeof(float) * 10); |
my_realloc ¿¡¼ data typeÀ» cast ÇÒ Çʿ䰡 ¾ø´Â °Í¿¡ ÁÖÀÇÇØ¶ó.
ÀÌ´Â ÀÎÀÚ·Î ¹ÞÀº º¯¼öÀÇ Å¸ÀÔ¿¡ ¸ÂÃç¼ ¸®ÅϰªÀ» º¸³»±â ¶§¹®ÀÌ´Ù.
The my_realloc ÇÔ¼ö´Â char *, int *, float * ŸÀÔÀ¸·Î ¿À¹ö·Îµù
µÇ¾îÀÖ´Ù.
C/C++¿¡¼ °¡ºñÁö ÄÝ·º¼ÇÀº Ç¥ÁØ¿¡¼ Áö¿øµÇÁö ¾Ê°í, µû¶ó¼ ¸Þ¸ð¸®¸¦ Á÷Á¢
ÇÒ´ç, ÇØÁ¦ÇÏ´Â °ÍÀÌ ¾î·Æ°í º¹ÀâÇÏ¸ç ¿¡·¯¸¦ ³»±â ½±´Ù.
°¡ºñÁö ÄÝ·º¼Ç(GC:Garbage Collection) Àº
±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ¿©·¯°¡Áö°¡ ÀÖ°í, °¢ ÇÁ·Î±×·¥¸¶´Ù Àû¿ëµÉ ¼ö ÀÖ´Â ¹æ¹ýÀÌ
´Ù¸£±â ¶§¹®¿¡ C++ Ç¥ÁØÀÇ ÀϺΰ¡ µÉ ¼ö ¾ø¾ú´Ù.
Àü»êÇÐÀÚµéÀº ¸¹Àº GC ¾Ë°í¸®ÁòÀ» °³¹ßÇß°í, À̵éÀº °¢ ¹®Á¦ºÐ¾ß¿¡¼¸¸
Àû¿ëµÉ ¼ö ÀÖ´Â °ÍµéÀ̾ú´Ù.
Áï, ¸ðµç ÀϹÝÀûÀÎ ¹®Á¦¿¡ Àû¿ëµÉ ¼ö ÀÖ´Â ÇϳªÀÇ ¹ü¿ë GC¾Ë°í¸®ÁòÀº ¾ø´Ù.
µû¶ó¼ GC´Â C++ Ç¥ÁØ¿¡ µé¾î°¡Áö ¸øÇß´Ù. µû¶ó¼ ¾ðÁ¦³ª ÇÏ´Â ÀÏ¿¡ ¸Â´Â
C++ ¶óÀ̺귯¸®¸¦ ¸¹Àº ¶óÀ̺귯¸®µé Áß¿¡¼ °í¸¦ ¼ö ÀÖ´Ù. ´ÙÀ½ C++
°¡ºñÁö ÄÝ·º¼Ç(Garbage Collection)
»çÀÌÆ®¿Í
¸Þ¸ð¸® °ü¸® »çÀÌÆ®¸¦ °¡º¸¾Æ¶ó.
Æ÷ÀÎÅÍ´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¥¿¡¼ ²À ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.
Java¿Í °°Àº Çö´ë ¾ð¾î¿¡¼´Â Æ÷ÀÎÅͰ¡ ¾ø´Ù (Java´Â ³»ºÎÀûÀ¸·Î¸¸
Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù).
Æ÷ÀÎÅÍ´Â ÇÁ·Î±×·¥À» ¾îÁö·´°í Àбâ Èûµé°Ô ¸¸µç´Ù. ÃÖ´ëÇÑ Æ÷ÀÎÅÍÀÇ »ç¿ëÀ» ÇÇÇϰí, ´ë½Å ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó.
Æ÷ÀÎÅÍ´Â Á¤¸» ¹®Á¦°¡ ¸¹°í, Æ÷ÀÎÅÍ ¾øÀÌ ÇÁ·Î±×·¥À» ¾²´Â °Ô °¡´ÉÇÏ´Ù.
Æ÷ÀÎÅÍ´Â ·¹ÆÛ·±½º¸¦ ¾µ ¼ö ¾ø´Â °÷¿¡¼¸¸ ½á¾ßÇÑ´Ù. ·¹ÆÛ·±½º
´Â º°Äª(alias)ÀÌ´Ù. ·¹ÆÛ·±½º¸¦ ¸¸µé¸é, ÀÌ´Â ´Ù¸¥ °´Ã¼(ȤÀº ´ë»ó)¿¡ ´Ù¸¥ À̸§À»
ÁÖ´Â °ÍÀÌ´Ù. ±× ¼ø°£ºÎÅÍ ·¹ÆÛ·±½º´Â ´ë»óÀÇ ´Ù¸¥ À̸§À¸·Î¼ µ¹¾Æ°¡°í,
·¹ÆÛ·±½º¿¡ ÇàÇÏ´Â ¸ðµç ¿¬»êÀÌ ±× ´ë»ó¿¡ ½ÇÁ¦·Î Àû¿ëµÈ´Ù. ·¹ÆÛ·±½ºÀÇ ¹®¹ý :
ŸÀÔÀ» ¼±¾ðÇÒ ¶§, µÚ¿¡ ·¹ÆÛ·±½º ¿¬»êÀÚ (&) ¸¦ ºÙÀÓÀ¸·Î½á ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
·¹ÆÛ·±½º´Â ¹Ýµå½Ã ¸¸µé¾î Áú ¶§ ÃʱâÈ µÇ¾î¾ß ÇÑ´Ù.
´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ -
int weight;
int & rweight = weight;
DOG aa;
DOG & rDogRef = aa; |
·¹ÆÛ·±½º¸¦ »ç¿ëÇÒ ¶§ Áöų °Í -
°´Ã¼¿¡ ´ëÇÑ ´Ù¸¥ À̸§À» ÁÖ°íÀÚ ÇÒ ¶§ ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó. ¸ðµç ·¹ÆÛ·±½º´Â ÃʱâȵǾî¾ß ÇÑ´Ù. ÇÁ·Î±×·¥ÀÇ ³ôÀº È¿À²°ú ÆÛÆ÷¸Õ½º¸¦ À§ÇØ ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó ·¹ÆÛ·±½º¿Í Æ÷ÀÎÅ͸¦ º¸È£Çϱâ À§ÇØ °¡´ÉÇѰæ¿ì¸é ¾ðÁ¦³ª
const¸¦ »ç¿ëÇØ¶ó.
·¹ÆÛ·±½º¸¦ »ç¿ëÇÒ ¶§ ÇÏÁö ¸»¾Æ¾ß ÇÒ °Í -
Áß¿ä : NULLÀÎ °´Ã¼¿¡ ´ëÇØ ·¹ÆÛ·±½º¸¦ ¾²Áö ¸»¾Æ¶ó. Æ÷ÀÎÅÍÀÇ ÁÖ¼Ò¸¦ ³ªÅ¸³»´Â &¿Í ·¹ÆÛ·±½º ¿¬»êÀÚ¸¦ Çò°¥¸®Áö ¸¶¶ó.
·¹ÆÛ·±½º ¿¬»êÀÚ´Â ¿ÀÁ÷ ¼±¾ðºÎ (À§¿¡ ³ª¿ÍÀÖ´Â ·¹ÆÛ·±½º »ç¿ë¹ý ÂüÁ¶) ¿¡¼¸¸ ¾²ÀδÙ. ·¹ÆÛ·±½º¿¡ »õ·Î °ªÀ» ÁöÁ¤ÇÏ·Á(Áï, º¯°æÇÏ·Á) ÇÏÁö ¸¶¶ó. ·¹ÆÛ·±½º¸¦ ¾µ ¼ö ÀÖ´Ù¸é Æ÷ÀÎÅ͸¦ ¾²Áö ¸¶¶ó. Áö¿ªº¯¼ö¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏÁö ¸¶¶ó. ·¹ÆÛ·±½º°¡ ½ºÄÚÇÁ°¡ ¹þ¾î³ º¯¼ö¸¦ °¡¸®Å°µµ·Ï ÇÏÁö ¸¶¶ó.
Á¤È®ÇÑ ¹ö±×ÀÇ ¿øÀÎÀ» ¾Ë¾Æ³»´Â °ÍÀº ²Ï³ª ¼º°¡½Å ÀÏÀÌÁö¸¸,
¿©±â¿¡µµ ¸î°¡Áö Å×Å©´ÐÀÌ ÀÖ´Ù.
Ç¥ÁØÃâ·ÂÀ¸·Î ÇÁ¸°Æ®ÇÏ¿© - ÇÁ·Î±×·¥ÀÌ °£´ÜÇÑ °æ¿ì, ¸î¸î º¯¼öµéÀÇ °ªÀ»
ÇÁ¸°Æ®Çغ¸°í, ¾î¶² °ªÀÎÁö º»´Ù - ¹«¾ùÀÌ À߸øµÇ¾ú´ÂÁö ã±â µð¹ö°Å¸¦ ÀÌ¿ëÇϱâ. µð¹ö°Å´Â breakpoint¸¦ ¼³Á¤Çϰí, ½ÇÇ൵Áß¿¡ Äڵ带
ÃßÀûÇØº¼ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ´ëºÎºÐÀÇ IDE´Â µð¹ö°Å°¡ °°ÀÌ ÀÖ´Ù.
GNU ½Ã½ºÅÛÀÇ °æ¿ì, gdb°¡ ÀÖ´Ù. ÄÄÆÄÀÏ·¯¿¡¼ Áö¿øÇÏ´Â ¿É¼ÇµéÀ» »ç¿ëÇÏ¿© º¸´Ù ¸¹Àº °æ°í(warning)À» º¼ ¼ö ÀÖµµ·Ï
ÇØ¶ó. ¿¹¸¦µé¾î g++ÀÇ °æ¿ì, -Wall ¿É¼ÇÀ» »ç¿ëÇØ¶ó.
µð¹ö±ë¿¡ µµ¿òÀÌ µÇ´Â »çÀÌÆ® :
C++À̳ª C ÇÁ·Î±×·¥À» µð¹ö±ëÇÏ·Á¸é 23절 ÀÇ ÆÄÀÏÀ» ÀÎŬ·çµåÇϰí,
'Makefile'¿¡ DEBUG_STR, DEBUG_PRT , DEBUG&_MEMÀ» µðÆÄÀÎ ÇØ¼
debug.h ÀÇ ÇÔ¼öµé·Î ÃßÀûÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
'-DDEBUG_STR' µîÀ» ¾ø¾Ù ¶§, µð¹ö±ë ÇÔ¼öµéÀº ((void)0) (NULLÀ» ÀǹÌ)À¸·Î ¼¼ÆÃµÉ
°ÍÀÌ´Ù. µû¶ó¼ ÃÖÁ¾ °á°ú¹°¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.
ÀÌ µð¹ö±ë ÇÔ¼öµéÀº ÇÁ·Î±×·¥¿¡ ´Ù¾çÇÏ°Ô Àû¿ëµÉ ¼ö ÀÖÀ» °ÍÀ̰í, °á°ú¹°ÀÇ Å©±â¸¦
Áõ°¡½ÃŰÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. debug ·çƾÀÇ ±¸ÇöÀ» À§Çؼ´Â 23절 ¸¦ ÂüÁ¶Çضó. ¶ÇÇÑ, 23절 ¿¡¼ debug.h ¿Í µð¹ö±ë ÇÔ¼öµéÀ»
ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À» º¸¾Æ¶ó. 23절 ÀÇ ¿¹¸¦ º¸¶ó.
C++·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§, ¿¡µðÅͳª IDE¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ëºÎºÐÀÇ
ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÌ ÁÁ¾ÆÇÏ´Â °ÍµéÀ» °®°Ô ¸¶·ÃÀ̰í, ¾î¶² °ÍÀÌ ÁÁÀºÁö¿¡
´ëÇØ °ÅÀÇ Á¾±³ÀûÀÎ ¹ÏÀ½À» °®´Â´Ù. ³Ê´Â ³»Àå ¿¡µðÅÍ¿Í ÄÄÆÄÀÏ·¯, ¹®¼µé°ú ±âŸ µîµîÀ¸·Î ¸ðµÎ Æ÷ÇÔÇÏ´Â
IDE (Intergrated Development Environment : ÅëÇÕ °³¹ßȯ°æ)¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
¶Ç´Â ¸î¸î »ç¶÷µéÀÌ ±×·¯´Â °Í ó·³, ´Ü¼øÇÑ ¿¡µðÅ͸¸À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
C++ °³¹ßÀ» À§ÇÑ ´ÙÀ½°ú °°Àº IDE (Integrated Development Environment) toolÀÌ ÀÖ´Ù.
IDEÀÇ ¹®Á¦Á¡Àº ÀÌ¿¡ °°ÀÌ µé¾îÀÖ´Â ¿¡µðÅÍÀÇ ±â´ÉÀÌ ¸Å¿ì ¶³¾îÁø´Ù´Â °ÍÀÌ´Ù.
µû¶ó¼ ¸¹Àº »ç¶÷µéÀº ÆÄ¿öÇ®ÇÑ ¿¡µðÅ͸¦ ¿øÇß°í, ÄÄÆÄÀÏ·¯¿Í ÇÔ²² »ç¿ëÇÑ´Ù. ÆÄ¿öÇ®ÇÑ ¿¡µðÅͷδ vim°ú emacs¸¦ µé ¼ö ÀÖ´Ù.
µÑ ´Ù ¸ðµÎ ¸¹Àº Ç÷§Æû¿¡¼ µ¿ÀÛÇϰí, È¿À²¼ºÀ» ³ô¿©ÁÙ ½ÅÅýº ÇÏÀ̶óÀÌÆÃÀ»
ºñ·ÔÇÑ ¿©·¯°¡Áö ±â´ÉµéÀ» °®°í ÀÖ´Ù. ´Ù¸¥ °ÍÀ¸·Î´Â UltraEdit(win32 only) ¿Í EditPlus(win32 only)°¡ ÀÖ´Ù.
C++ Beautifier HOWTO http://www.linuxdoc.org/LDP/HOWTO/C-C++Beautifier-HOWTO.html
( Çѱ۹ø¿ª ) C++ ÇÁ·Î±×·¥À» À§ÇÑ ¹öÀü°ü¸® ½Ã½ºÅÛ HOWTO (CVS HOWTO) http://www.linuxdoc.org/LDP/HOWTO/CVS-HOWTO.html À¯¿ëÇÑ ¸®´ª½º »çÀÌÆ® http://www.milkywaygalaxy.freeservers.com
¿Í ¹Ì·¯ »çÀÌÆ® -
angelfire,
geocities,
virtualave,
50megs,
theglobe,
NBCi,
Terrashare,
Fortunecity,
Freewebsites,
Tripod,
Spree,
Escalix,
Httpcity,
Freeservers.
C++¿¡ ´ëÇÑ ¼ö¹é¸¸ÀÇ ¿Â¶óÀÎ ¹®¼/ÅØ½ºÆ®/Âü°íÀÚ·á °¡ÀÌµå µîÀÌ Á¸ÀçÇÑ´Ù. ÀÌ´Â C++ÀÌ ¸Å¿ì ¿À·§µ¿¾È ¾²À̰í Àֱ⠶§¹®ÀÌ´Ù. ¾Æ¸¶
Google, Yahoo, Lycos, Excite µîÀÇ ÀÎÅÍ³Ý °Ë»ö¿£ÁøÀ» »ç¿ëÇÏ¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
C++ ÇÁ·Î±×·¡¸Ó¸¦ À§ÇØ À¯¿ëÇÒ Java Ã¥µé :
´ÙÀ½ÀÇ C++ »çÀÌÆ®µéÀ» ¹æ¹®Çغ¸¶ó :-
ÀÎÅͳݿ¡´Â ¾î¸¶¾î¸¶ÇÏ°Ô ¸¹Àº C++ ¹®¼µéÀÌ ÀÖ´Ù.
Google, Yahoo, Lycos, Infoseek, Excite °°Àº °Ë»ö¿£Áø¿¡ °¡¼
´ÙÀ½ÀÇ Å°¿öµå¸¦ ³Ö¾îº¸¾Æ¶ó.
'C++ tutorials'
'C++ references'
'C++ books'
Advanced ¸¦ Ŭ¸¯Çؼ
search by exact phrase¸¦ ¼±ÅÃÇÔÀ¸·Î½á
´õ Á¤È®ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÎÅͳݿ¡´Â ¸¹Àº ¼öÀÇ ¿Â¶óÀÎ Æ©Å丮¾óÀÌ ÀÖ´Ù. °Ë»ö¿£Áø¿¡¼ 'C++ tutorials'·Î
°Ë»öÀ» ÇØºÁ¶ó.
°Ë»ö¿£Áø¿¡¼ 'C++ Reference' ·Î °Ë»öÀ» ÇØº¸¾Æ¶ó.
C++¿¡¼ Java ÇüÅÂÀÇ API¸¦ Á¦°øÇÏ´Â ´ÙÀ½ »çÀÌÆ®µéÀ» °¡º¸¾Æ¶ó.
ÄÚµù °ü½ÀÀº ÇÁ·Î±×·¥ÀÇ °¡µ¶¼º°ú À¯Áöº¸¼ö¸¦ À§ÇØ ¸Å¿ì Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù.
¶ÇÇÑ ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» Å©°Ô Çâ»ó½ÃŲ´Ù.
ÀÌ´Â ÁÁÀº ÄÚµù ÈÆ·ÃÀ» À§ÇØ ÇÊ¿äÇÏ´Ù.
¾Æ·¡ÀÇ ³»¿ëÀº class Á¤ÀÇ¿¡ ÀÖ¾î Á¦¾ÈµÈ °ÍÀÌ´Ù.
¸ðµç public º¯¼öµéÀº mFooVar°ú °°ÀÌ m À¸·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
m Àº member¸¦ ÀǹÌÇÑ´Ù. ¸ðµç protected º¯¼öµéÀº mtFooVar ¿Í °°ÀÌ
mt ·Î ½ÃÀÛÇØ¾ßÇϰí, ¸Þ½îµå´Â tFooNum() ¿Í °°ÀÌ t·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
t ´Â protected¸¦ ÀǹÌÇÑ´Ù. ¸ðµç private º¯¼öµéÀº mvFooVar¿Í °°ÀÌ
mv ·Î ½ÃÀÛÇØ¾ßÇϰí, ¸Þ½îµåµéÀº
vFooLone() ¿Í °°ÀÌ v·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
v ´Â private À» ÀǹÌÇÑ´Ù. ¸ðµç public, protected, private º¯¼öÀ̸§µéÀº m ´ÙÀ½¿¡´Â mFooVar ÀÇ F°°ÀÌ ´ë¹®ÀÚ·Î ½ÃÀÛÇØ¾ßÇÑ´Ù. ¸ðµç Æ÷ÀÎÅÍ º¯¼öµéÀº ´ÙÀ½°ú °°ÀÌ p·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
Public º¯¼ö mpFooVar °ú ¸Þ½îµå FooNum() Protected º¯¼ö mtpFooVar ¿Í ¸Þ½îµå tFooNum() Private º¯¼ö mvpFooVar ¿Í ¸Þ½îµå vFooNum()
¼¼°èÀûÀ¸·Î ÀϰüµÈ C++ ÄÚµù °ü½ÀÀº º¸´Ù ÇÁ·Î±×·¡¹ÖÀ» Àß ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÙ °ÍÀÌ´Ù. ¾Æ·¡¿¡ ÁÖ¾îÁø ¿¹Á¦ Äڵ忡¼
t ´Â protected¸¦,
v ´Â private¸¦,
m ´Â member-variable ¸¦,
p ´Â pointer¸¦
ÀǹÌÇÑ´Ù.
class SomeFunMuncho
{
public:
int mTempZimboniMacho; // OOP¿¡¼´Â ¿ÀÁ÷ Àӽà º¯¼öµé¸¸ publicÀ̾î¾ß ÇÑ´Ù.
float *mpTempArrayNumbers;
int HandleError();
float getBonyBox(); // º¯¼ö¿¡ Á¢±ÙÇϱâ À§ÇÑ ÇÔ¼ö
float setBonyBox(); // º¯¼ö¿¡ Á¢±ÙÇϱâ À§ÇÑ ÇÔ¼ö
protected:
float mtBonyBox;
int *mtpBonyHands;
char *tHandsFull();
int tGetNumbers();
private:
float mvJustDoIt;
char mvFirstName[30];
int *mvpTotalValue;
char *vSubmitBars();
int vGetNumbers();
}; |
ÇÁ·Î±×·¥ÀÌ ¼ö¹é¸¸ ¶óÀÎÀ¸·Î Ä¿Áö°Ô µÇ¸é, À§¿Í °°Àº °ü½ÀÀ» ¸Å¿ì ÁÁ¾ÆÇϰÔ
µÉ °ÍÀÌ´Ù. ´Ü¼øÈ÷ mvFirstName ¶ó´Â º¯¼öÀ̸§À»
º» °Í¸¸À¸·Îµµ, À̰ÍÀÌ Å¬·¡½ºÀÇ ¸â¹öÀ̰í, private º¯¼ö¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î
ÄÚµåÀÇ °¡µ¶¼ºÀº ¿Ã¶ó°¡°Ô µÈ´Ù. ´ÙÀ½ÀÇ C++ ÄÚµù Ç¥ÁØ URLµéÀ» ¹æ¹®Çغ¸¾Æ¶ó.
C++ÀÇ Å« ´ÜÁ¡Àº Á¶±×¸¸ º¯°æÀ» ÇÒ ¶§¸¶´Ù Ç×»ó ÄÄÆÄÀϰú ¸µÅ©¸¦ ´Ù½Ã
ÇØÁÖ¾î¾ß ½ÇÇàÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
ÄÄÆÄÀÏ/¸µÅ©/µð¹ö±ë »çÀÌŬÀº ¸¹Àº ½Ã°£ÀÌ °É¸®°í »ý»êÀûÀÌÁö ¸øÇÏ´Ù.
Çö´ëÀÇ CPU¿Í RAMÀº ¸Å¿ì ºü¸£°í ½ÎÁö°í ÀÖÀ¸¹Ç·Î, ¾î¶² ¶§´Â
Çϵå¿þ¾î¿¡ ¸¹Àº µ·À» ÅõÀÚÇϰí, °³¹ßÀ» À§Çؼ´Â script ¾ð¾î¸¦ ¾²´Â °ÍÀÌ
ÁÁÀ» ¼öµµ ÀÖ´Ù.
PHP³ª PIKE °°Àº ½ºÅ©¸³Æ® ¾ð¾î´Â ¸µÅ·°ú ÀçÄÄÆÄÀÏ °úÁ¤À» ¾ø¾Ý°í,
µû¶ó¼ °³¹ß °úÁ¤À» ´ÜÃà½Ãų ¼ö ÀÖ´Ù. ¸Þ¸ð¸®(RAM) °¡°ÝÀÌ ¶³¾îÁö°í, CPU ¼Óµµ°¡ ¿Ã¶ó°¨¿¡ µû¶ó
PHP³ª PIKE°°Àº ½ºÅ©¸³Æ® ¾ð¾îÀÇ Àαâ´Â Æø¹ßÇÒ °ÍÀÌ´Ù.
PHP³ª PIKE´Â °´Ã¼ÁöÇâ°ú C/C++À» ´àÀº ¹®¹ýÀ¸·Î ÀÎÇØ °¡Àå ³Î¸® ¾²ÀÌ´Â ½ºÅ©¸³Æ®
¾ð¾î°¡ µÉ °ÍÀÌ´Ù. PHP³ª Pike C++ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ¾¸À¸·Î½á ÇÁ·Î±×·¡¹ÖÀÇ »ý»ê¼ºÀº
´Ù¼¸ ¹è ³ª Áõ°¡ÇÒ °ÍÀÌ´Ù.
±×¸®°í PHP³ª PIKE´Â '°³³äÀÇ Áõ¸í'À» À§ÇØ À¯¿ëÇϰí, ÇÁ·ÎÅäŸÀÔÀ» ºü¸£°Ô ¸¸µé¾î³¾
¼ö ÀÖ´Ù. PHP´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ̳ª À¥ ÇÁ·Î±×·¡¹Ö¿¡¼ ¸Å¿ì Àα⸦ ¾ò°í ÀÖ´Ù.
PHP´Â °¡±î¿î ¹Ì·¡¿¡ °¡Àå ³Î¸® ¾²ÀÌ´Â ½ºÅ©¸³Æ® ¾ð¾î°¡ µÉ °ÍÀÌ´Ù.
PHP ´Â http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html ( Çѱ۹ø¿ª )
¿¡ ÀÖ´Ù. The Pike ´Â http://pike.roxen.com ¿Í http://www.roxen.com ¿¡ ÀÖ´Ù. Roxen À¥¼¹ö´Â ¼ø¼öÇÏ°Ô Pike·Î ¾²¿©Á®¼, ¾ó¸¶³ª Pike°¡ °·ÂÇÑÁö º¸¿©ÁÖ°í ÀÖ´Ù.
Pike´Â ¸î¸î ÀÛ¾÷¿¡ ´ëÇØ¼´Â Javaº¸´Ù ºü¸£°Ô µ¹¾Æ°¡°í, ¸Þ¸ð¸®µµ »ó´çÈ÷
È¿À²ÀûÀ¸·Î »ç¿ëÇÑ´Ù.
¸¸¾à »ó¿ë ½ºÅ©¸³Æ® ¾ð¾î¸¦ ¿øÇÑ´Ù¸é,
SoftIntegration corporation ( http://www.softintegration.com ) ¿¡¼ 'Ch scripting'À» º¸¾Æ¶ó. Ch¶ó ºÒ¸®´Â ½ºÅ©¸³Æ® ¾ð¾î ȯ°æÀº C¸¦ Æ÷ÇÔÇϰí, ³ôÀº ¼öÁØÀÇ È®Àåµé°ú
C++À» ºñ·ÔÇÑ ´Ù¸¥ ¾ð¾îµéÀÇ Æ¯Â¡µéÀ» Æ÷ÇÔÇÑ´Ù. µû¶ó¼ Çѹø ¹è¿ì±â¸¸ Çϸé
°ÅÀÇ ¸ðµç Á¾·ùÀÇ ÇÁ·Î±×·¡¹Ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ Cȣȯ ½ºÅ©¸³Æ® ¾ð¾î ȯ°æÀº ¿©·¯ Ç÷§Æû¿¡¼ ÇÑ ÇÁ·Î±×·¥À» À̽İ¡´ÉÇϰÔ
ÇÏ´Â Áß°£ ¿ªÇÒÀ» ÇÑ´Ù.
À̽İ¡´ÉÇÑ Ch ÄÚµå´Â ÀÎÅͳݰú ÀÎÆ®¶ó³ÝÀ» ÅëÇØ ½´ÆÛÄÄÇ»ÅͺÎÅÍ ¿÷½ºÅ×À̼Ç,
PC, ÆÊ(Palm), PDA ¸¦ ºñ·Ô ÄÄÇ»ÅÍÀÇ ¹üÁÖ¿¡ ¼ÓÇÏÁö ¾Ê´Â CNC ¸Ó½Å, ·Îº¿,
TV, ³ÃÀå°í µî À¸·Î ÆÛÁ® ¾îµð¼³ª ¾ÈÀüÇÏ°Ô µ¹¾Æ°¥ ¼ö ÀÖ´Ù.
PHP´Â À¥¹®¼¸¦ ó¸®ÇÏ´Â ½ºÅ©¸³Æ® ¾ð¾î·Î ¸Å¿ì ºü¸£°Ô ÁøÈÇß°í, °´Ã¼ÁöÇâÀ»
Áö¿øÇÑ´Ù. PHP´Â 'class'¶ó´Â Ű¿öµå¸¦ °¡Áö°í °´Ã¼ÁöÇâ ½ºÅ©¸³ÆÃÀ» ±¸ÇöÇϰíÀÚ Çß´Ù.
¾Æ¸¶µµ °¡±î¿î ½ÃÀϳ»¿¡ PHP´Â °´Ã¼ ÁöÇâ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ °·ÂÇÑ ½ºÅ©¸³Æ® ¾ð¾î·Î
ºü¸£°Ô ÁøÈÇÒ °ÍÀÌ´Ù. °¡±î¿î ¹Ì·¡¿¡ PHP´Â À¥ÇÁ·Î±×·¡¹Ö »Ó ¾Æ´Ï¶ó ÀϹÝÀûÀÎ
¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö¿¡µµ ¾²ÀÌ°Ô µÉ °ÍÀÌ´Ù.
À¥°ú ÀÏ¹Ý ¾îÇø®ÄÉÀ̼ǿ¡ ´Ù¸¥ ¾ð¾î¸¦ ¾²±â º¸´Ù´Â ±×³É PHP¸¸ ¾²¸é µÉ °ÍÀ̱â
¶§¹®ÀÌ´Ù. PHP HOWTO :
http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html ( Çѱ۹ø¿ª .
Template ´Â ÄÚµå Àç»ç¿ëÀ» ½±°Ô ¸¸µé¾î generic ÇÁ·Î±×·¡¹ÖÀ» °¡´ÉÇÏ°Ô ÇÏ´Â C++ÀÇ Æ¯Â¡ÀÌ´Ù. ¾Æ·¡¿Í °°Àº °£´ÜÇÑ ¿¹¸¦ º¸ÀÚ :
#include <string>
#include <iostream>
void printstring(const std::string& str) {
std::cout << str << std::endl;
}
int main()
{
std::string str("Hello World");
printstring(str);
} |
printstring() ´Â std::string
¸¦ ù¹øÂ° ÀÎÀÚ·Î ¹Þ´Â´Ù. µû¶ó¼ ÀÌ´Â ¿ÀÁ÷ string¸¸ ÇÁ¸°Æ® ÇÒ ¼ö ÀÖ°í,
¹®ÀÚ¹è¿(char array)À» ÇÁ¸°Æ® Çϱâ À§Çؼ´Â ÇÔ¼ö¸¦ ¿À¹ö·Îµù½ÃŰµç°¡
»õ·Î¿î À̸§ÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ´Â ÇÔ¼öÀÇ ±¸ÇöÀÌ Áߺ¹µÇ¹Ç·Î ÁÁÁö ¾ÊÀº °ÍÀ̰í,
À¯Áöº¸¼öÇϱⰡ Èûµé¾îÁö°Ô µÈ´Ù. templateÀ» ¾²¸é ¿ì¸®´Â Äڵ带 Àç»ç¿ë°¡´ÉÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù.
¾Æ·¡¿Í °°Àº ÇÔ¼ö¸¦ º¸¶ó :
template<typename T>
void print(const T& var) {
std::cout << var << std::endl;
} |
ÄÄÆÄÀÏ·¯´Â ¿ì¸®°¡ ¹«½¼ ŸÀÔÀ» ³Ñ°ÜÁÖµçÁö ¾Ë¾Æ¼ print
ÇÔ¼öÀÇ Äڵ带 ÀÚµ¿À¸·Î ¸¸µé¾î ÁÙ °ÍÀÌ´Ù.
À̰ÍÀÌ templateÀÇ Áß¿äÇÑ ÀåÁ¡ÀÌ´Ù.
Java´Â templateÀÌ ¾ø°í, µû¶ó¼ Java¿¡¼ÀÇ generic ÇÁ·Î±×·¡¹Ö°ú ÄÚµå Àç »ç¿ëÀº
´õ Èûµé´Ù. ·¹ÆÛ·±½º :
STL¿¡ °üÇÑ ´ÙÀ½ »çÀÌÆ®µéÀ» ¹æ¹®Çغ¸¶ó :
STL tutorials:
Main STL sites:
STLÀº ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸î°¡Áö À¯¿ëÇÑ µ¥ÀÌÅͱ¸Á¶¿Í ¾Ë°í¸®ÁòÀ» Á¦°øÇÑ´Ù.
ÀÌ´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.
ÄÁÅ×À̳Ê. µÎ °¡Áö ŸÀÔÀÌ ÀÖ´Ù :
¼øÂ÷Àû(Sequential). ¿©±â¿¡´Â vector, list, deque µîÀÌ ÀÖ´Ù. Á¤·ÄµÈ Á¶ÇÕ(Associative). ¿©±â¿¡´Â set, map, multiset, multimap ÀÌ ÀÖ´Ù.
Iterator. ÄÁÅ×À̳ÊÀÇ ³»¿ëÀ» »ìÆìº¼ ¼ö ÀÖ°Ô ÇØÁÖ´Â Æ÷ÀÎÅÍ °°Àº °ÍµéÀÌ´Ù. ÀϹÝÀûÀÎ(generic) ¾Ë°í¸®Áòµé. STLÀº ÄÁÅ×ÀÌ³Ê Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÏ´Â
¿©·¯°¡Áö È¿°úÀûÀ¸·Î ±¸ÇöµÈ Ç¥ÁØ ¾Ë°í¸®Áòµé
(¿¹¸¦µé¾î find, sort, merge µî)ÀÌ ÀÖ´Ù.
(¸î¸î containerµéÀº ÀÌ Áß ÀϺθ¦ Ưº°ÇÑ ¸ñÀûÀ¸·Î ¸â¹öÇÔ¼ö·Î °®°í ÀÖ´Ù) Function obejct. function object´Â operator()ÀÇ Á¤ÀǸ¦ Á¦°øÇÏ´Â classÀÇ instanceÀÌ´Ù.
ÀÌ´Â ÀÌ objectµéÀ» ÇÔ¼ö °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. Adaptors. STLÀº ´ÙÀ½°ú °°Àº °ÍµéÀ» Á¦°øÇÑ´Ù.
Allocators. ¸ðµç STL ÄÁÅ×ÀÌ³Ê class´Â ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸® Á¤º¸¸¦ °®°í ÀÖ±â À§ÇÑ
allocator class¸¦ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ³ª´Â ÀÌ ºÎºÐÀº »ý·«ÇÒ °ÍÀÌ´Ù.
¾ÕÀ¸·Î vector, list, set ±×¸®°í map ÄÁÅ×À̳ÊÀÇ »ç¿ë¹ýÀ» »ìÆìº¼ °ÍÀÌ´Ù.
À̵éÀ» »ç¿ëÇϱâ À§Çؼ´Â ³»°¡ STL iterator¿¡ ´ëÇØ ¸»ÇÒ ¼ö ÀÖµµ·Ï
iterator¸¦ ¾µ ÁÙ ¾Ë¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ¶Ç set°ú map ÄÁÅ×À̳ʸ¦ »ç¿ëÇÑ´Ù´Â °ÍÀº
³»°¡ function object¿¡ ´ëÇØ ¹º°¡ ¼³¸íÇÒ ¼ö ÀÖµµ·Ï °£´ÜÇÑ function object°¡
ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
STLÀÌ Áö¿øÇÏ´Â ¾Ë°í¸®Áò¿¡ ´ëÇØ¼´Â °£´ÜÈ÷ ¼³¸íÇÒ °ÍÀ̰í, adoptor´Â
¾ð±ÞÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¸î¸î ÇÔ¼ö ÀÎÀÚÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼ À̸§ÀÌ ¹Ù²ð ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î ´ëºÎºÐÀÇ int
ŸÀÔ ÀÎÀÚµéÀº ½ÇÁ¦·Î´Â size_typeÀ̶ó´Â typeÀ» °®°í À̰ÍÀÌ ÀûÀýÇÑ
±âº» ŸÀÔÀ¸·Î tyepdefµÇ´Â ÇüÅ¿¡ ÀÇÇØ ¾²ÀδÙ. ¸¸¾à ¿©·¯ ÇÔ¼öµéÀÇ ½ÇÁ¦
ÀÎÀÚ Å¸ÀÔÀ» ¾Ë°í½Í´Ù¸é ÀÛ¾÷ÇÏ´Â °Í¿¡ ´ëÇÑ ¹®¼³ª Çì´õÆÄÀÏÀ» Âü°íÇØ¶ó. STL¿¡¼ Á¦°øµÇ´Â ¸î°¡Áö À¯Æ¿¸®Æ¼ classµéÀÌ Àִµ¥, ÀÌ Áß Á¦ÀÏ Áß¿äÇÑ °ÍÀº
pair classÀÌ´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾîÀÖ´Ù.
template<class T1, class T2>
class pair {
public:
T1 first;
T2 second;
pair(const T1& a, const T2& b) : first(a), second(b) {}
}; |
±×¸®°í ½±°Ô pair¸¦ ¸¸µéµµ·Ï ´ÙÀ½°ú °°Àº make_pair ÇÔ¼ö°¡ Á¦°øµÈ´Ù :
pair<T1,T2> make_pair(const T1& f, const T2&,s) |
¶ÇÇÑ ==¿Í < ¿¬»êÀÚµµ ÀÖ´Ù. ÀÌ template class¿¡´Â º¹ÀâÇÑ °ÍÀÌ ¾ø°í
±×³É »ç¿ëÇÏ¸é µÈ´Ù. À̸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â #include ·Î <utility>¸¦
includeÇÏ¸é µÈ´Ù. pair´Â ¿©·¯°÷¿¡¼ ¾²ÀÏ ¼ö Àִµ¥, ƯÈ÷ set°ú map class¿¡¼
¸¹ÀÌ ³ªÅ¸³´Ù.
STLÀ» »ç¿ëÇϱâ À§Çؼ´Â ÀûÀýÇÏ°Ô Çì´õÆÄÀÏÀ» #include ÇØÁÖ¾î¾ß ÇÑ´Ù.
¸¸¾à ÄÄÆÄÀÏ·¯°¡ Ç¥ÁØ¿¡ ¸ÂÁö ¾Ê´Â´Ù¸é ¾à°£ ´Ù¸¦ ¼öµµ ÀÖÁö¸¸,
Ç¥ÁØ¿¡ ¸Â´Â ÄÄÆÄÀÏ·¯ (g++ °°Àº)´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù :
Ç¥ÁØ C++ ¶óÀ̺귯¸®´Â .h ¸¦ µÚ¿¡ ºÙÀÌÁö ¾Ê´Â ´Ù´Â °Í¿¡
ÁÖÀÇÇØ¶ó. ¸¸¾à ¿¾¹öÀüÀÇ È¤Àº ÁÁÁö ¾ÊÀº ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇϴµ¥, À§¿Í °°ÀÌ ÇØ¼ include°¡
µÇÁö ¾Ê´Â´Ù¸é .h¸¦ ºÙ¿©¼ ½ÃµµÇغ¸¾Æ¶ó.
ÇÏÁö¸¸ ±×º¸´Ù´Â »õ·Î¿î ÄÄÆÄÀÏ·¯¸¦ ±¸ÇÏ´Â °Ô ´õ ³ªÀ» °ÍÀÌ´Ù.
ÄÁÅ×ÀÌ³Ê classµéÀº ¼·Î °°Àº À̸§À» °®´Â ¸â¹öÇÔ¼ö¸¦ ¸¹ÀÌ °®´Â´Ù.
ÀÌ ÇÔ¼öµéÀº ¸ðµç class¿¡ ´ëÇØ ¶È°°Àº (ȤÀº ¸Å¿ì ºñ½ÁÇÑ) ÀÎÅÍÆäÀ̽º¸¦
Á¦°øÇÑ´Ù (±×·¯³ª ¹°·Ð ±× ³»ºÎ ±¸ÇöÀº ´Ù¸¦ °ÍÀÌ´Ù). ¾Æ·¡ÀÇ Ç¥´Â
¿ì¸®°¡ »ìÆìº¼ ÇÔ¼öµéÀ» ³ª¿ÇÑ °ÍÀÌ´Ù.
º°Ç¥´Â ±× ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀÌ ±× À̸§ÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù´Â °ÍÀÌ´Ù.
표 2. ÄÁÅ×ÀÌ³Ê Class ÀÎÅÍÆäÀ̽º | ¿¬»êÀÚ/ÇÔ¼ö¸í | ¸ñÀû | vector | list | set | map | | == | ºñ±³ | * | * | * | * | | < | ºñ±³ | * | * | * | * | | begin | iterator | * | * | * | * | | | end | iterator | * | * | * | * | | size | ¿ø¼ÒÀÇ ¼ö | * | * | * | * | | empty | ºñ¾ú´ÂÁö | * | * | * | * | | front | ù¹øÂ° ¿ø¼Ò | * | * | | | | back | ¸¶Áö¸· ¿ø¼Ò | * | * | | | | [ ] | ¿ø¼Ò Á¢±Ù ¹× º¯°æ | * | | | * | | | insert | ¿ø¼Ò(µé) Ãß°¡ | * | * | * | * | | push_back | ¸Ç µÚ¿¡ ¿ø¼Ò Ãß°¡ | * | * | | | | push_front | ¸Ç ¾Õ¿¡ ¿ø¼Ò Ãß°¡ | | * | | | | erase | ¿ø¼Ò(µé) »èÁ¦ | * | * | * | * | | pop_back | ¸Ç µÚ ¿ø¼Ò »èÁ¦ | * | * | | | | pop_front | ¸Ç ¾Õ ¿ø¼Ò »èÁ¦ | | * | | | | | | |
¸¸¾à ¾Æ·¡ÀÇ ³»¿ëÁß Àǹ®°¡´Â ºÎºÐÀÌ ÀÖÀ¸¸é (¾Æ¸¶µµ ÀÕÀ» °ÍÀÌ´Ù),
Á¶±×¸¸ Å×½ºÆ® ÇÁ·Î±×·¥À» Çϳª Â¥¼ ¾î¶»°Ô µ¹¾Æ°¡´Â Áö ¾Ë¾Æº¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
º¤ÅÍ´Â C++ÀÇ ¹è¿°ú ºñ½ÁÇÑ, ÇÏÁö¸¸ À̸¦ ¹ßÀü½ÃŲ ÄÁÅ×À̳ÊÀÌ´Ù.
ƯÈ÷, º¤ÅÍ´Â ¼±¾ð½Ã¿¡ ¾ó¸¶³ª º¤ÅͰ¡ Ä¿¾ßÇÒÁö¸¦ ¾Ë Çʿ䰡 ¾ø°í,
push_back
ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¾ðÁ¦³ª »õ·Î¿î ¿ø¼Ò¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
( »ç½Ç insert
ÇÔ¼ö°¡ ¾îµð¿¡µç »õ ¿ø¼ÒµéÀ» ³ÖÀ» ¼ö ÀÖ°Ô ÇØÁÖÁö¸¸, ÀÌ´Â ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù.
¸¸¾à À̸¦ ÀÚÁÖ ÇØ¾ßÇÑ´Ù¸é list¸¦ ´ë½Å »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇØº¸¾Æ¶ó. )
º¤ÅÍ´Â class templateÀ̹ǷÎ, ¼±¾ð½Ã¿¡ º¤ÅͰ¡ °®°Ô µÉ
°´Ã¼ÀÇ Å¸ÀÔÀ» ¼±¾ðÇØÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦µé¾î ´ÙÀ½°ú °°´Ù.
vector<int> v1;
vector<string> v2;
vector<FiniteAutomaton> v3; |
À§ ³»¿ëÀº v1À» int °ªÀ» °®´Â º¤ÅÍ·Î, v2¸¦ stringÀ» °®´Â º¤ÅÍ·Î, v3¸¦
FiniteAutomaton (¾Æ¸¶µµ ¹Ì¸® ÀÌ·± ŸÀÔÀÌ ¼±¾ðµÇ¾úÀ» °ÍÀÌ´Ù) ¸¦ °®°í ÀÖ´Â
º¤ÅÍ·Î ¼±¾ðÇÑ´Ù.
ÀÌ ¼±¾ðµéÀº º¤ÅÍÀÇ Å©±â¿¡ ´ëÇØ ÀüÇô ¾Ë·ÁÁÖÁö ¾Ê°í
( ±¸Çö¿¡ µû¶ó ±âº» º¤ÅÍ »çÀÌÁî°¡ ÀÖÀ» °ÍÀÌ´Ù. )
, Çʿ信 µû¶ó ¾ó¸¶µçÁö ´Ã·Á¼ ¾µ ¼ö ÀÖ´Ù. ±×·¯³ª ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÔÀ¸·Î½á Ãʱâ Å©±â¸¦ Á¤ÇØÁÙ ¼öµµ ÀÖ´Ù.
ÀÌ´Â v4°¡ ¹®ÀÚ(char)ÀÇ º¤ÅͰ¡ µÇ°í, óÀ½¿¡´Â 26°³ÀÇ ±ÛÀÚ¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
¶ÇÇÑ, º¤ÅÍ ¾È¿¡ µé¾î°¡´Â ¼öµéÀ» ÃʱâÈ ÇÏ´Â ¹æ¹ýµµ Àִµ¥, ÀÌ´Â ´ÙÀ½°ú °°´Ù.
vector<float> v5(100,1.0); |
À§ ¼±¾ðÀº v5 °¡ 100°³ÀÇ 1.0À¸·Î ÃʱâÈ µÈ ½Ç¼ö°ªÀ»
°®´Â º¤ÅÍÀÓÀ» ¼±¾ðÇÑ´Ù.
Çѹø º¤Å͸¦ ¸¸µç ÈÄ¿¡´Â, size ÇÔ¼ö¸¦ ½á¼ ÇöÀç
º¤ÅÍÀÇ Å©±â¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
ÀÌ ÇÔ¼ö´Â ¾Æ¹« ÀÎÀÚ ¾øÀÌ º¤ÅÍ¿¡ µé¾îÀÖ´Â ¿ø¼Ò ¼ö¸¦ ³ªÅ¸³»´Â integer¸¦ ¸®ÅÏÇÑ´Ù.
( ¾ö¹ÐÇÏ°Ô ¸»ÇÏÀÚ¸é
size_type ŸÀÔÀÌ ¸®ÅϵÇÁö¸¸,
À̰ÍÀÌ ¹Ù·Î integer·Î ¹Ù²î¾îÁø´Ù )
±×·¸´Ù¸é ´ÙÀ½ÀÇ ÀÛÀº ÇÁ·Î±×·¥À¸·Î ¹«¾ùÀÌ Ãâ·ÂµÉ±î?
<vector-size.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
vector<int> v2(10);
vector<int> v3(10,7);
cout << "v1.size() returns " << v1.size() << endl;
cout << "v2.size() returns " << v2.size() << endl;
cout << "v3.size() returns " << v3.size() << endl;
} |
º¤ÅͰ¡ ºñ¾ú´ÂÁö¸¦ üũÇϱâ À§Çؼ´Â, empty ÇÔ¼ö¸¦ ¾²¸é µÈ´Ù.
À̰͵µ ¿ª½Ã ¾Æ¹« ÀÎÀÚ ¾øÀÌ boolean °ªÀ» ¸®ÅÏÇϴµ¥, ºñ¾îÀÖÀ¸¸é true¸¦,
ºñ¾îÀÖÁö ¾ÊÀ¸¸é false¸¦ ¸®ÅÏÇÑ´Ù.
±×·¸´Ù¸é ´ÙÀ½ÀÇ ÇÁ·Î±×·¥Àº ¹«¾ùÀ» ÇÁ¸°Æ®ÇÒ±î (true´Â 1·Î, false´Â 0À¸·Î ÇÁ¸°Æ®µÈ´Ù)?
<vector-empty.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
vector<int> v2(10);
vector<int> v3(10,7);
cout << "v1.empty() has value " << v1.empty() << endl;
cout << "v2.empty() has value " << v2.empty() << endl;
cout << "v3.empty() has value " << v3.empty() << endl;
} |
º¤ÅÍÀÇ ¿ø¼Ò´Â []¿¬»êÀÚ¸¦ »ç¿ëÇØ¼ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ ¸ðµç
¿ø¼Ò¸¦ ÇÁ¸°Æ®ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
vector<int> v;
// ...
for (int i=0; i<v.size(); i++)
cout << v[i]; |
(ÀÌ´Â ¿ø·¡ÀÇ ¹è¿À» »ç¿ëÇÏ´Â °Í°ú ¸Å¿ì ºñ½ÁÇÏ´Ù). ¶ÇÇÑ, [] ¿¬»êÀÚ´Â º¤ÅÍ ¿ø¼ÒÀÇ °ªÀ» ¹Ù²Ù±â À§Çؼµµ ¾²ÀÏ ¼ö ÀÖ´Ù.
vector<int> v;
// ...
for (int i=0; i<v.size(); i++)
v[i] = 2*i; |
front ÇÔ¼ö´Â º¤ÅÍÀÇ Ã¹¹øÂ° ¿ø¼Ò¸¦ ¸®ÅÏÇÑ´Ù.
vector<char> v(10,'a');
// ...
char ch = v.front(); |
¶ÇÇÑ, front¸¦ ÀÌ¿ëÇØ¼ ù¹øÂ° ¿ø¼ÒÀÇ °ªÀ» ¹Ù²Ü ¼öµµ ÀÖ´Ù.
vector<char> v(10,'a');
// ...
v.front() = 'b'; |
back ÇÔ¼ö´Â front¿Í °°Àº ¿ªÇÒÀ» ÇÏÁö¸¸, º¤ÅÍÀÇ ¸Ç ¸¶Áö¸· ¿ø¼Ò¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌ
´Ù¸£´Ù.
vector<char> v(10,'z');
// ...
char last = v.back();
v.back() = 'a'; |
[]¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ º¸ÀÚ.
<vector-access.cpp>=
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v1(5);
int x;
cout << "Enter 5 integers (seperated by spaces):" << endl;
for (int i=0; i<5; i++)
cin >> v1[i];
cout << "You entered:" << endl;
for (int i=0; i<5; i++)
cout << v1[i] << ' ';
cout << endl;
} |
À§¿¡ ¾ð±ÞµÈ [] ¿Ü¿¡µµ, º¤ÅÍÀÇ ¿ø¼Ò¿¡ Á¢±ÙÇϰųª ¹Ù²Ü ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¸î°¡Áö ´õ ÀÖ´Ù.
push_backÀº »õ·Î¿î ¿ø¼Ò¸¦ º¤ÅÍÀÇ ³¡¿¡ ´õÇÒ °ÍÀÌ´Ù. pop_backÀº º¤ÅÍÀÇ ³¡¿¡¼ ¿ø¼Ò¸¦ Çϳª ¾ø¾Ù °ÍÀÌ´Ù. insert ´Â Çϳª ¶Ç´Â ¿©·¯°³ÀÇ ¿ø¼Ò¸¦ º¤ÅÍÀÇ ¿øÇÏ´Â À§Ä¡¿¡ »ðÀÔÇÒ °ÍÀÌ´Ù. erase´Â Çϳª ¶Ç´Â ¿©·¯°³ÀÇ ¿ø¼Ò¸¦ ¿øÇÏ´Â À§Ä¡¿¡¼ ¾ø¾Ù °ÍÀÌ´Ù.
±×·±µ¥ insert³ª erase´Â º¤ÅÍ¿¡¼ ¿À¹öÇìµå°¡ Å« ¿¬»êÀÓ¿¡ ÁÖÀÇÇ϶ó. ¸¸¾à insert³ª erase¸¦
½á¾ßÇÑ´Ù¸é, º¤ÅÍ ´ë½Å list µ¥ÀÌÅͱ¸Á¶¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù.
<vector-mod.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
for (int i=0; i<10; i++) v.push_back(i);
cout << "Vector initialised to:" << endl;
for (int i=0; i<10; i++) cout << v[i] << ' ' ;
cout << endl;
for (int i=0; i<3; i++) v.pop_back();
cout << "Vector length now: " << v.size() << endl;
cout << "It contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
int a1[5];
for (int i=0; i<5; i++) a1[i] = 100;
v.insert(& v[3], & a1[0],& a1[3]);
cout << "Vector now contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
v.erase(& v[4],& v[7]);
cout << "Vector now contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
} |
À§ÀÇ ¿¹¿¡¼´Â º¤ÅÍ v°¡ ¼±¾ðµÈ ÈÄ, push_backÀ» »ç¿ëÇÏ¿© ÃʱâÈ µÇ¾ú´Ù.
±×¸®°í pop_backÀ¸·Î µÚÀÇ ¸î ¿ø¼Ò°¡ ¾ø¾îÁ³°í,
¹è¿ÀÌ Çϳª ¸¸µé¾îÁ®¼ ±× ³»¿ëÀÌ insert¸¦ »ç¿ëÇØ¼ v¿¡ »ðÀԵǾú´Ù.
¸¶Áö¸·À¸·Î ¸î¸î ¿ø¼ÒµéÀ» Áö¿ì±â À§ÇØ erase°¡ »ç¿ëµÇ¾ú´Ù.
À§¿¡ »ç¿ëµÈ ÇÔ¼öµéÀº ´ÙÀ½°ú °°Àº ÀÎÀÚµéÀ» ¹Þ´Â´Ù.
push_back : vector¿¡ µé¾î°¡´Â °Í°ú °°Àº ŸÀÔÀÇ ÀÎÀÚ¸¦ Çϳª ¹Þ´Â´Ù. pop_back : ÀÎÀÚ¸¦ ¹ÞÁö ¾Ê´Â´Ù. ±×¸®°í ºó º¤ÅÍ¿¡ ´ëÇØ pop_backÀ» ÇÏ¸é ¾ÈµÈ´Ù. insert ´Â ¼¼ °¡Áö ÇüÅ·Π¾²ÀδÙ.
insert(pos, T& x) : ¿ø¼Ò x Çϳª¸¦ pos°¡ °¡¸®Å°´Â À§Ä¡¿¡ »ðÀÔÇÑ´Ù. insert(pos, start, end) : ´Ù¸¥ ÄÁÅ×ÀÌ³Ê ¾ÈÀÇ ³»¿ëÀ» pos°¡ °¡¸®Å°´Â À§Ä¡¿¡ »ðÀÔÇÑ´Ù. »ðÀԵǴ ¿ø¼ÒµéÀº start¿¡¼ ½ÃÀÛÇØ¼, end¸¦ ¸¸³¯ ¶§±îÁö (end°¡ °¡¸®Å°´Â °ÍÀº µé¾î°¡Áö ¾Ê´Â´Ù) ÀÌ´Ù. insert(pos, int rep, T& x) : rep °³ÀÇ x°ªÀ» pos À§Ä¡¿¡ »ðÀÔÇÑ´Ù. (°°Àº °ªÀ» ¿©·¯¹ø »ðÀÔ)
À§ÀÇ Äڵ忡 ³ª¿ÍÀÖµíÀÌ, pos°¡ °¡¸®Å°´Â Æ÷Áö¼Ç °ªÀº ¿ø¼Ò°¡ »ðÀ﵃ °÷ÀÇ ÁÖ¼Ò¿©¾ß ÇÑ´Ù.
¸¶Âù°¡Áö·Î start¿Í endµµ ÁÖ¼Ò°ªÀ̾î¾ß ÇÑ´Ù. (»ç½Ç À̰ÍÀº À̵éÀÌ iteratorÀ̱⠶§¹®ÀÌ´Ù.
ÀÌ¿¡ ´ëÇØ¼´Â ´ÙÀ½ Àå¿¡¼ ´õ »ìÆìº¼ °ÍÀÌ´Ù.)
º¤ÅÍ vÀÇ ¿ø¼ÒµéÀ» Â÷·Ê´ë·Î º¸´Â °¡Àå ½¬¿î ¹æ¹ýÀº À§¿¡ ÇÑ ¹æ¹ý°°ÀÌ ÇÏ´Â °ÍÀÌ´Ù.
|