<< ÇÁ·£µå(friend) ÇÔ¼ö >> Ŭ·¡½ºÀÇ ¸â¹öµéÀº ¾ï¼¼½º(ACCESS!) ±ÇÇÑ ÁöÁ¤ÀÚ¿¡ ÀÇÇؼ­ ºñ°ø°³, Áï pri vate ¼Ó¼ºÀ» °¡Áø °ÍÀº °°Àº Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼ö·Î¸¸ ÂüÁ¶°¡ °¡´ÉÇÏ°í ¿ÜºÎ ¿¡¼­ Á¢±ÙÀÌ ºÒ°¡´ÉÇÏ´Ù°í ÇÏ¿´´Ù. ±×·¯³ª, ¿¹¿ÜÀûÀ¸·Î Á¢±ÙÀÌ °¡´ÉÇÑ ÇÔ¼ö °¡ Àִµ¥, ÀÌ°ÍÀ» ÇÁ·£µå ÇÔ¼ö¶ó°í ÇÑ´Ù. (Ä£±¸´Ï±î »ç»ýÈ° ħÇØ°¡ °¡´É?) friendÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¾î¶² Ŭ·¡½º³»¿¡ ÇÁ·£µå ÇÔ¼öÀÇ ÇÁ·ÎÅäŸ ÀÔÀ» ±â¼úÇÏ¿© ÁØ´Ù. Çü½Ä) class ACCESS { : friend void func(); : } ÇÁ·£µå ÇÔ¼ö´Â private³ª publicÀ̳ª ¾î´À ¿µ¿ª¿¡ À־ »ó°üÀÌ ¾ø´Ù. (friendÀÚüµµ ¿¹¾à¾îÀ̱⠶§¹®ÀÌ´Ù.) ex) #include class ACCESS { private: // »ý·«°¡´É int x,y; friend void sub(); // ÇÁ·£µå ÇÔ¼öÀÓÀ» ¼±¾ð ACCESS(int a,int b) { x=a; y=b; } // »ý¼ºÀÚ }; void sub() { int i,j; class ACCESS var(3,10); // »ý¼ºÀÚ È£Ãâ - ¸â¹ö ÃʱâÈ­ i=var.x; // ¸¶À½²¯ ÂüÁ¶°¡´É j=var.y; // ¿ª½Ã ¸¶À½²¯ ÂüÁ¶°¡´É cout << i << j << endl; } void main(void) { sub(); } ÇÁ·£µåÇÔ¼ö°¡ Ŭ·¡½º¸¦ ¸¶À½²¯ ÂüÁ¶°¡´ÉÇÏ´Ù°í Çؼ­ À§ÀÇ (1)°ú (2)¸¦ i=x; j=y; ¶ó°í ÇÏ¸é ¾ÈµÈ´Ù. ÀÌ°ÍÀÌ ¸â¹öÇÔ¼ö¿Í ÇÁ·£µåÇÔ¼öÀÇ ¸â¹ö»ç¿ë¿¡ ´ëÇÑ À¯ÀÏÇÑ Â÷ÀÌÁ¡ÀÌ´Ù. ¸â¹öÇÔ¼ö´Â : '.'À» ÀÌ¿ëÇØ ÂüÁ¶ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. (ÀμöÀÇ »ý·«°¡´É) ÇÁ·£µåÇÔ¼ö : ÇÑ °´Ã¼¸¦ Ŭ·¡½º¸¦ »ç¿ëÇؼ­ ¼±¾ðÇÑÈÄ ±× º¯¼ö¿Í '.'À» ÀÌ ¿ëÇÏ¿© ÂüÁ¶Çؾ߸¸ ÇÑ´Ù. (À§ÀÇ ¿¹¿¡¼­´Â var·Î ¼±¾ð) ¼±Á¶Å¬·¡½º(±âÀú, ±â¹Ý¶Ç´Â »óÀ§ Ŭ·¡½º)ÀÇ friendÇÔ¼ö´Â ÈļÕŬ·¡½º(ÆÄ»ý ¶Ç´Â ÇÏÀ§Å¬·¡½º)ÀÇ friendÇÔ¼ö°¡ ¾Æ´Ï´Ù. Áï, ¼±Á¶ÀÇ Ä£±¸´Â ¼±Á¶¿¡°Ô¸¸ Àû¿ë, ¿ª½Ã ÈļÕÀÇ Ä£±¸´Â ÈļÕÀÇ Ä£±¸¿¡°Ô¸¸ Àû¿ëµÈ´Ù. (Àΰ£°ú °°´Ù!) ( ¼±Á¶¿Í ÈļÕÀº Ŭ·¡½ºÀÇ °è½Â(¶Ç´Â »ó¼Ó, ÆÄ»ý)¿¡ ³ª¿À´Â ³»¿ëÀÌ´Ù.) << Ŭ·¡½ºÀÇ °è½Â(inheritance) >> OOP(object-oriented programming)ÀÇ ±âº»À̳äÀº Çѹø ÀÛ¼ºÇÑ Äڵ带 º° ¼öÁ¤¾øÀÌ °è¼Ó Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â µ¥ ÀÖ´Ù. ±âÁ¸¿¡ ÀÌ¹Ì ÀÛ¼ºÇسõÀº Ŭ ·¡½º¿¡ ¸î°¡Áö ±â´ÉÀ» Ãß°¡ÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ È®ÀåÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. C++¿¡¼­´Â ÀÌ·¯ÇÑ °ÍÀ» °è½Â(¶Ç´Â ÆÄ»ý, »ó¼Ó)À̶ó´Â °³³äÀ¸·Î Áö¿øÇÑ´Ù. ±âÁ¸¿¡ Á¸ÀçÇÏ´ø Ŭ·¡½º¿¡¼­ Ãß°¡ÇÒ °ÍÀº Ãß°¡ÇÏ°í ÇÊ¿ä¾ø´Â °ÍÀº »©´Â µî ÇüÅÂÀ» º¯°æ½ÃÄѼ­ ÇüŸ¦ ¹Ù²Ù¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ ¶§¿¡µµ ¹° ·Ð Àü¿¡ Á¸ÀçÇÏ´ø Ŭ·¡½º´Â Áö¿öÁö°Å³ª Ư¼ºÀ» ÀÒÁö ¾Ê´Â´Ù. (OOPÀÌ ¾Æ´Ï¸é ºÒ°¡´ÉÇÑ ÀÏ...) << ¼±Á¶Å¬·¡½º(Base class)¿Í ÈļÕŬ·¡½º(Derived class) >> °è½Â¿¡ ÀÇÇؼ­ »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé ¶§ ¿ø·¡ÀÖ´ø Ŭ·¡½º¸¦ ¼±Á¶(¶Ç´Â ±â ¹Ý, ±âÀú, »óÀ§)Ŭ·¡½º¶ó°í ÇÏ°í, »õ·Î ¸¸µé¾îÁö´Â Ŭ·¡½º¸¦ ÈļÕ(¶Ç´Â ÆÄ »ý, ÇÏÀ§) Ŭ·¡½º¶ó°í ÇÑ´Ù. Ŭ·¡½ºÀÇ °è½Â¿¡ °üÇؼ­´Â ´ÙÀ½°ú °°Àº Ư¡µé ÀÌ ÀÖ´Ù. ¨ç °è½ÂµÈ Ŭ·¡½º¿¡¼­ ¶Ç °è½Â½ÃÅ°´Â °ÍÀÌ °¡´ÉÇϸç, ¼±Á¶, ÈļÕÀÇ °³³äÀº »ó´ëÀûÀÌ´Ù. (Àΰ£¼¼»ó¿¡¼­ ÇҾƹöÁö, ¾Æ¹öÁö, ¾Æµé°ü°è¿Í °°´Ù!) ¦£¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ class A ¦¢ ¼±Á¶Å¬·¡½º ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¢ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ AÀÇ ÈļÕŬ·¡½º ¦¢ class B ¦¢ BÀÇ ¼±Á¶Å¬·¡½º ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¢ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦¢ class C ¦¢ ÈļÕŬ·¡½º ¦¦¦¡¦¡¦¡¦¡¦¡¦¥ ¨è ÇÑ Å¬·¡½º¿¡¼­ ¿©·¯°³ÀÇ Å¬·¡½º¸¦ °è½Â½Ãų ¼ö ÀÖ´Ù. (Á¦ÇÑÀÌ ¾ø´Ù) ¨é ¿©·¯ Ŭ·¡½º¿¡¼­ ÇÑ Å¬·¡½º·Î °è½Â½Ãų ¼ö ÀÖ´Ù. (´ÙÁß»ó¼Ó) ex) Ŭ·¡½º °è½Âµµ ¦£¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ class A ¦¢ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦¢ class B ¦¢ ¦¢ class C ¦¢ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¢ ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦«¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦£¦¡¦¡¦ª¦¡¦¡¦¤¦£¦¡¦¡¦ª¦¡¦¡¦¤¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦¢ class D ¦¢ ¦¢ class F ¦¢¦¢ class E ¦¢¦¢ class H ¦¢ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¦¦¡¦¡¦¨¦¡¦¡¦¥¦¦¦¡¦¡¦¡¦¡¦¡¦¥¦¦¦¡¦¡¦¨¦¡¦¡¦¥ ¦¢ ¦¢ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¥ ¦¢ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦£¦¡¦¡¦ª¦¡¦¡¦¤ ¦¢ class G ¦¢ ¦¢ class I ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¥ ¦¦¦¡¦¡¦¡¦¡¦¡¦¥ (À§ÀÇ °ÍÀº ¾ÆÁÖ ´Ü¼øÇÑ(?) °è½ÂµµÀÌ´Ù. À©µµ¿ì¿ë OWL(object windows lib rary)°°Àº °ÍÀº ÀüÁö 1Àå¿¡ ±×·ÁÁö´Â °Íµéµµ ¼öµÎ·èÇÏ´Ù°í ÇÑ´Ù. ) * ÈļÕŬ·¡½º Á¤ÀÇÀÇ Çü½Ä ([]´Â »ý·«°¡´É - default: class¿¡¼­´Â private, struct¿¡¼­´Â public) class <Ŭ·¡½º¸í> : [¾ï¼¼½º °è½Â ÁöÁ¤ÀÚ] <¼±Á¶Å¬·¡½º¸í> {Ŭ·¡½º³»¿ë}; ¾ï¼¼½º °è½Â ÁöÁ¤ÀÚ¿¡´Â public°ú private°¡ ¿À¸ç, ÈļÕÀÇ ¼Ó¼ºÀ» °áÁ¤ÇÑ ´Ù. (protected´Â ¾²Áö ¸øÇÑ´Ù´Â »ç½Ç¿¡ ÁÖÀÇ - ¸â¹ö¾ï¼¼½º ±ÇÇÑÁöÁ¤ÀÚ¿Í´Â º°°³ÀÇ °ÍÀÌ´Ù.) * ¾ï¼¼½º °è½Â ÁöÁ¤ÀÚ¿¡ µû¸¥ ¼Ó¼ºÀÇ °è½Â 1. public : ¼±Á¶ÀÇ ¸ðµç ¸â¹ö¿Í ¸â¹ö ÇÔ¼öµéÀ» ¼±Á¶ ³»¿¡¼­ ¾²°í ÀÖ´ø Ư ¼ºµé(¾ï¼¼½º ±ÇÇѵé)À» º¯°æ¾øÀÌ ±×´ë·Î °¡Áö°í ¿Â´Ù. 2. private : ¼±Á¶ÀÇ ¸ðµç ¸É¹ö¿Í ¸É¹öÇÔ¼öµéÀ» private:·Î ¹Ù²Ù¾î¼­ °¡Áö °í ¿Â´Ù. (°ú¿¬ »ç¿ëÇÒ ÀÏÀÌ ÀÖÀ»·Á´ÂÁö...) (privateÀÇ ÆÄ¿ö°¡ publicº¸´Ù ¼¼´Ù!!) ex) class ACCESS { // ¼±Á¶Å¬·¡½º int x,y; public: func() {... } }; class PRM: public ACCESS { char a,b; public: put() {... } }; ÈļÕŬ·¡½º°¡ ¹ß»ýÇϸé, ¼±Á¶ÀÇ ³»¿ëÀÌ Èļտ¡ ±×´ë·Î º¹»çµÈ´Ù°í »ý°¢ÇÏ ¸é µÈ´Ù. PRM Ŭ·¡½ºÀÇ °æ¿ì¸¦ ¿¹·Î µé¸é, ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ³»¿ëÀÌ ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù. Áï, class PRM { int x,y; char a,b; public: func() {... } put() {... } }; À§ÀÇ ¿¹¿¡¼­´Â °è½Â¼Ó¼ºÀÌ publicÀ̹ǷΠÈļÕÀÇ ¼Ó¼ºÀº º¯ÇÏÁö ¾Ê¾Ò´Ù. ¸¸¾à¿¡ private·Î °è½ÂÇϸé class PRM: private ACCESS { char a,b; // »ý·«½Ã¿¡´Â private¼Ó¼ºÀÓÀ» ÀØÁö ¸»ÀÚ. func() {... }; put() {... }; }; ÀÌ·¸°Ô µÇ¹ö¸°´Ù. * Çò°¥¸®´Â °ÍµéÀ» ´ëÃæ Á¤¸®Çϸé... 1. ÈļÕÀÌ °¡Áö°íÀÖ´Â ¸É¹öÇÔ¼öµéÀ» ¼±Á¶ ³»¿¡¼­ ÇÁ·£µå ÇÔ¼ö·Î ¼±¾ðÀ» ÇÑ ´Ù¸é, ÈļÕÀÇ ¸â¹öÇÔ¼öµéÀº ¼±Á¶ÀÇ ³»ºÎ¸¦ ½±°Ô Á¢±ÙÇÒ¼ö°¡ ÀÖ´Ù. 2. ¼±Á¶¿¡¼­ public ¶Ç´Â protected ¼Ó¼ºÀ» °¡Áø °ÍµéÀº ´ç¿¬È÷ Èļտ¡¼­ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. (ÁÖÀÇ: proteced:·Î ¼±¾ðµÈ ¸â¹öµéÀº ÈÄ¼Õ ¿ÜºÎ¿¡¼­´Â Á¢±Ù ºÒ°¡´ÉÇÏ´Ù. publicd:À¸·Î ¼±¾ðµÈ ¸â¹öµéÀº ÈÄ¼Õ ¿ÜºÎ¿¡¼­µµ Á¢±Ù °¡´ÉÇÏ´Ù.) 3. frinedÇÔ¼ö´Â °è½Â¹ÞÁö ¸øÇÑ´Ù´Â »ç½ÇÀ» ÀØÁö ¸»ÀÚ. 4. ±×¸®°í Ãß°¡·Î... ¼±Á¶ Ŭ·¡½ºÀÇ °´Ã¼´Â ÈļÕÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®ÇÒ ¼ö°¡ ÀÖ´Ù. ÈÄ¼Õ Å¬·¡½ºÀÇ °´Ã¼´Â ¼±Á¶ÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®ÇÒ ¼ö°¡ ¾ø´Ù. ex) class A { ... }; class B:public { ... }; A obj1; B obj2; A *ptr1; B *ptr2; ptr1 = &obj2; // °¡´É ptr2 = &obj1; // ºÒ°¡´É << ÈļÕŬ·¡½º¿¡¼­ »ý¼ºÀÚÀÇ È£Ãâ >> ÄÄÆÄÀÏ·¯´Â ÈļÕŬ·¡½ºÀÇ »ý¼ºÀÚ°¡ È£ÃâµÉ ¶§ ¸ÕÀú ¼±Á¶Å¬·¡½ºÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ°í ³­ ÈÄ¿¡ ÈļÕÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÑ´Ù. ÈļÕÀ̶õ ¸â¹öµéÀ» ¼±Á¶·ÎºÎ ÅÍ »ó¼Ó¹Þ¾Ò±â ¶§¹®¿¡ ÈļÕÀÇ »ý¼ºÀÚ¸¸À¸·Î´Â ÀÚ½ÅÀÇ µ¥ÀÌÅ͸â¹öµéÀ» Ãʱâ È­½Ãų ¼ö ¾ø´Â °ÍÀÌ´Ù. ±×·¡¼­ »ó¼Ó¹ÞÀº µ¥ÀÌÅÍ ¸â¹öµéÀº ¼±Á¶ÀÇ »ý¼ºÀÚ¿¡°Ô ÃʱâÈ­¸¦ ÀÏÀÓÇÑ´Ù. (ÈļÕÀº ¼±Á¶°¡ ³ºÀº ÀڽĵéÀ̹ǷΠºÎ¾çÇÒ Àǹ«°¡ ÀÖ´Â °ÍÀÌ´Ù!(??)) ÈļÕÀÇ »ý¼ºÀÚ´Â °´Ã¼ »ý¼º½Ã¿¡ Àü´ÞµÈ Àμö(arguement)µéÀ» ÀÏ´Ü ¹Þ¾ÆµÎ ¾ú´Ù°¡ ¼±Á¶¿¡°Ô ÀϺθ¦ ³Ñ°ÜÁØ´Ù. ¼±Á¶ÀÇ »ý¼ºÀÚ´Â ³Ñ°Ü¹ÞÀº µ¥ÀÌÅÍ·Î ÀÚ ±â°¡ ¸ÃÀº ÃʱâÈ­¸¦ ¼öÇàÇÏ°í ÈļÕÀÇ »ý¼ºÀÚ´Â ³²Àº µ¥ÀÌÅÍ·Î ÃʱâÈ­¸¦ ¼ö ÇàÇÑ´Ù. Çü½Ä> Ŭ·¡½º¸í::ÈļÕŬ·¡½ºÀÇ »ý¼ºÀÚ(Àμöµé):¼±Á¶Å¬·¡½ºÀÇ »ý¼ºÀÚ(Àμöµé) { .. ÇÔ¼öº»Ã¼.. } ex) class ACCESS { // ¼±Á¶Å¬·¡½º int x; public: ACCESS(int i=0) { x=i; } // µðÆúÆ® »ý¼ºÀÚ }; class PRM: public ACCESS { // ÈļÕŬ·¡½º int y,z; public: | PRM(int l,int m,int n); // ÃʱâÈ­ »ý¼ºÀÚ ¼±¾ð }; PRM::PRM(int l,int m,int n) { // »ý¼ºÀÚ ¿ÜºÎ Á¤ÀÇ y=l; z=n; }; PRMÀÇ »ý¼ºÀÚ¸¦ º¸¸é µÞºÎºÐ¿¡ ACCESS(m) ÀÌ ºÙ¾îÀÖ´Ù. ÀÌ¿Í°°ÀÌ ÆÄ»ýŬ·¡ ½ºÀÇ »ý¼ºÇÔ¼ö¸¦ Á¤ÀÇÇÒ¶§´Â ±â¹ÝŬ·¡½ºÀÇ »ý¼ºÇÔ¼öµµ ÃʱâÈ­¸¦ ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. << C++¿¡¼­ ¸ðµâº° ÄÄÆÄÀÏ - ÇÁ·ÎÁ§Æ® >> C++¿¡¼­´Â ÇÁ·Î±×·¥À» ÀÌ·ç´Â ±âº»´ÜÀ§°¡ Ŭ·¡½ºÀ̹ǷÎ, (Âü°í:C¿¡¼­´Â ÇÔ ¼ö) Ŭ·¡½º Çϳª¿¡ ´ëÇؼ­ Çì´õÆÄÀÏ°ú CPPÆÄÀÏÀ» ¸¸µé¾î µÎ°í Çì´õÆÄÀÏ¿¡¼­ ´Â Ŭ·¡½º Á¤ÀǸ¦ ÇÏ°í CPPÆÄÀÏ¿¡¼­´Â Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ ·¯ÇÑ ¹æ¹ý´ë·Î ÀÛ¾÷ÇÏ´Â ½À°üÀ» µéÀÌ¸é ºÐ¼®ÀÌ ¿ëÀÌÇØÁö´Â °ÍÀº ¹°·ÐÀÌ°í ºÐ¼®µµ ÈξÀ ½¬¿öÁø´Ù. °¡·É, AŬ·¡½º¸¦ ÀÛ¼ºÇسõ°í °¢°¢ ´Ù¸¥ 2¸ðµâÀÎ A¿Í B¿¡¼­ »ç¿ëÇÑ´Ù°í Çß À» ¶§, ´ÙÀ½°ú °°ÀÌ µÈ´Ù. ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ main() ¦¢ ¦¢ moduleBÀÇ ÇÔ¼ö ¦¢ ¦¢ mouduleAÀÇ ÇÔ¼ö ¦¢¡ç¦¡¦¨¦¡¦¡¡æ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥ moduleA.CPP ¦¢ moduleB.CPP ¦¢Æ÷ÇÔ ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¸â¹öÇÔ¼ö Á¤ÀÇ ¦¢¡ç¦¡¦ª¦¡¦¡¦¡¦© classA Á¤ÀÇ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥ classA.CPP classA.h Çì´õÆÄÀϳ¢¸® °è½ÂÀ» À§ÇØ º¹ÀâÇÏ°Ô ¼­·Î include¸¦ ÇÏ´Ùº¸¸é º»ÀÇ ¾Æ´Ï°Ô Ŭ·¡½º°¡ Áߺ¹Á¤ÀǵǴ ¼ö°¡ Àִµ¥, ±×·± °æ¿ì¸¦ ¹æÁöÇϱâ À§Çؼ­ Á¶°ÇºÎ ÄÄÆÄÀÏ Àü󸮱â(preprocessor)¸¦ »ç¿ëÇÑ´Ù. ÀϹÝÀû ÇüÅ´ ´ÙÀ½°ú °°´Ù. #ifndef _CLASSA #define _CLASSA class classA { : : } #endif ÀÌ·¸°Ô Á¶°ÇºÎ ÄÄÆÄÀÏ Áö½Ã°¡ ÀÖÀ¸¸é ´Ü 1¹ø¸¸ÀÇ Á¤ÀÇ°¡ ÀÌ·ç¾îÁö¹Ç·Î ¾È ÀüÇÏ´Ù. Áߺ¹½ÃÅ°Áö ¾Ê´Â´Ù¸é ÇÊ¿ä¾ß ¾ø°ÚÁö¸¸ ¸¸¾àÀ» ´ëºñÇϱâ À§Çؼ­ ÀÌ ·¯ÇÑ ÇüŸ¦ °ü·ÊÀûÀ¸·Î »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. << ÇÔ¼öÀÇ ¿À¹ö·Îµù(overloading)°ú °¡»óÇÔ¼ö(virtual function) >> * Á¤Àû ¹ÙÀεù(static binding) ¨ç ÆÄÀϽà ȣÃâµÉ ÇÔ¼öÀÇ °áÁ¤ ¨è static º¯¼ö¿Í ºñ½Á~ ¨é °¡»óÇÔ¼ö°¡ ¾Æ´ÑÀÌ»ó Ç×»ó Á¤Àû¹ÙÀεù¸¸ ÀÌ·ç¾îÁø´Ù. * µ¿Àû ¹ÙÀεù(dynamic binding) ¨ç ½ÇÇà½Ã È£ÃâµÉ ÇÔ¼öÀÇ °áÁ¤ ¨è auto º¯¼ö¿Í ºñ½Á~ ¨è µ¿Àû ¹ÙÀεùÀ» À§Çؼ­´Â °¡»óÇÔ¼ö°¡ ÇÊ¿ä ÀÌ ºÎºÐÀº... ¿¹Á¦¾øÀÌ ¼³¸íÇϱâ¶õ Áö±ØÈ÷ ¾î·Æ°í, ¶Ç C++¿¡¼­ ÃÖ°í·Î Çò °¥¸®´Â ºÎºÐÁßÀÇ ÇϳªÀθ¸Å­ ÁÖÀDZí°Ô »ìÆ캸¾Æ¾ß ÇÑ´Ù! ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ. Position, Point, CircleÀ̶ó´Â 3°³ÀÇ Å¬·¡½º·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÀÌ ¿¹Á¦´Â ¾î¶² Ã¥¿¡ ÀÖ´Â °ÍÀ» °³Á¶(?)ÇÑ °ÍÀÌ´Ù. ¹«½¼ ³»¿ëÀÎÁö Â÷±ÙÂ÷±Ù Àß ¶â¾îº¸ ¸é ½±°Ô ¾Ë ¼ö°¡ ÀÖ´Ù. #include #include #include #include #include enum Boolean {false,true}; class Position { protected: int px,py; public: Position(int x,int y) { // constructor px=x; py=y; } int Getpx() { return (px); } int Getpy() { return (py); } }; class Point:public Position { protected: int Color; Boolean Visible; public: Point(int x,int y,int c):Position(x, y) { // constructor of derived class Color=c; Visible=false; } int Getcolor() {returnColor;} Boolean Getvisible() {return Visible;} void Show() { Visible=true; putpixel(px,py,Color); } void Hide() { Visible=false; putpixel(px,py,getbkcolor()); } void Moveto(int nx, int ny); }; // ------------------------------------- void Point::Moveto(int nx,int ny) { Hide(); px = nx; py = ny; Show(); delay(100); } // ------------------------------------- class Circle:public Point { private: int Rad; public: Circle(int x,int y,int c,int r):Point(x, y, c) { Rad = r; } void Show() { Visible=true; setcolor(Color); circle(px,py,Rad); } void Hide() { Visible=false; setcolor(getbkcolor()); circle(px,py,Rad); } void Moveto(int nx, int ny); void Resize(int nr) { Hide(); Rad = nr; delay(50); Show(); } int GetRad() { return (Rad);} }; // ------------------------------------- void Circle::Moveto(int nx,int ny) { Hide(); px = nx; py = ny; Show(); delay(100); } // ------------------------------------- void main() { int gd=VGA, gm=VGAHI; initgraph(&gd,&gm,""); Circle WON(100,200,14,50); WON.Show(); for (int i=0;i<30;i++) WON.Moveto(WON.Getpx()+5,WON.Getpy()); for (int j=0;j<50;j++) WON.Resize(WON.GetRad()+3); getch(); closegraph(); } ´ÙÀ½Àº À§ÀÇ ¿¹Á¦ÀÇ Å¬·¡½º °è½Â»óȲ°ú º¯¼öµéÀÇ »ó¼Ó°ü°è¸¦ Ç¥·Î µµ½ÃÇÑ °ÍÀÌ´Ù. ±½Àº ¼±À¸·Î µÑ·¯½Î¿©Áø ºÎºÐÀ» ÁÖ¸ñÇؼ­ »ìÆ캸ÀÚ. ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤ ¦¢Position (°è½Â->)¦¢Point (°è½Â->)¦¢Circle ¦¢ ¦§¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢px; px; px; ¦¢ ¦¢py; py; py; ¦¢ ¦§¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢ ¦¢Color; Color; ¦¢ ¦¢ ¦¢Visible; Visible; ¦¢ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢ ¦¢Rad; ¦¢ ¦§¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢Position(); Position(); Position(); ¦¢ ¦¢Getpx(); Getpx(); Getpx(); ¦¢ ¦¢Getpy(); Getpy(); Getpy(); ¦¢ ¦§¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢ ¦¢Point(); Point(); ¦¢ ¦¢ ¦¢Getcolor(); Getcolor(); ¦¢ ¦¢ ¦¢Getvisible(); Getvisible(); ¦¢ ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦© ¦¢ ¦¢Circle(); ¦¢ ¦¢ ¦®¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¯ ¦¢ ¦­Show(); Show(); ¦­ ¦¢ ¦­Hide(); Hide(); ¦­ ¦¢ ¦­Moveto(); Moveto(); ¦­ ¦¢ ¦±¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦° ¦¢ ¦¢Resize(); ¦¢ ¦¢ ¦¢GetRad(); ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥ CircleÀ̶ó´Â Ŭ·¡½º´Â Position°ú Point 2°³ÀÇ ¼±Á¶·ÎºÎÅÍ 2Â÷ °è½ÂÀ» ¹Þ Àº Ŭ·¡½ºÀ̸ç, ¼±Á¶¿¡ ÇÔ¼ö¸í, ÀÎÀÚÇüÀÌ µ¿ÀÏÇÑ ¸ð¾çÀÇ ÇÔ¼ö°¡ ´Ù½Ã Á¤ÀÇ µÇ¾î ÀÖ´Ù. (±½Àº ¼±ºÎºÐ) ÀÌ·± °æ¿ì¿¡´Â Èļտ¡¼­ »õ·Ó°Ô Á¤ÀÇµÈ ¸â¹öÇÔ¼ö°¡ ¾²ÀÌ°Ô µÇ¸ç, ÀÌ·¯ÇÑ °ÍÀ» ÇÔ¼öÀÇ ¿À¹ö·Îµù(overloading)À̶ó°í ÇÑ´Ù. Áï, Circle³»¿¡¼­ Show() ¿Í Hide()ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é, Circle::Show()¿Í Circle::Hide()°¡ È£Ã⠵ǾîÁø´Ù. (Âü°í: C++¿¡¼­´Â »ó¼ÓÀ» ¸¹ÀÌÇϸé ÇÒ ¼ö·Ï ¹ßÀüµÈ Ŭ·¡½º·Î ¿©±ä´Ù. (´ç¿¬ÇÑ ¾ê±âÀΰ¡?) ±×¸¸Å­ ¸¹ÀÌ ¹ßÀüÇß´Ù´Â ¶æ!! ¿À¹ö·Îµù¶ÇÇÑ ¼±Á¶ÀÇ °ÍÀ» ¹«½ÃÇÏ°í ´õ¿í ¹ßÀüÀûÀÎ ÈļÕÀÇ °ÍÀ» ¾²°Ú´Ù´Â °³³äÀ̶ó°í »ý°¢ÇÏ¸é ½±´Ù. ¿ÏÀüÈ÷ ÇϱػóÀ̳×.. ) ±×·¸´Ù¸é Moveto()ÇÔ¼ö´Â ¾îÂî µÇ´Â°¡? Moveto()ÇÔ¼ö´Â Show()ÇÔ¼ö¿Í Hide()ÇÔ¼ö¸¦ ´Ù½Ã È£ÃâÇÏ°í Àִµ¥, À§ÀÇ ¿¹Á¦¸¦ º¸¸é ¾Ë°ÚÁö¸¸, Point()¿¡¼­ Á¤ÀÇµÈ Moveto()ÇÔ¼ö¿Í Circle()¿¡¼­ Á¤ÀÇµÈ Moveto()ÇÔ¼ö´Â ¿ÏÀüÈ÷ °°´Ù.. ÇÔ¼ö¸í, ÀÎÀÚ, ³»¿ë±îÁö ¿ÏÀüÈ÷~ °° ´Ù. Áï, Áߺ¹Á¤ÀÇµÈ °ÍÀ̶ó°í º¼ ¼ö°¡ ÀÖ´Ù. ±×·³, Circle() Ŭ·¡½º ³»ÀÇ Moveto()¸¦ Á¤ÀÇÇÒ °Í ¾øÀÌ Point()·ÎºÎÅÍ »ó ¼Ó¹Þ¾Æ »ç¿ëÇÏ¸é µÉ µíµµ ½Í´Ù... (À§ÀÇ ¿¹Á¦¿¡¼­ Circle.Moveto()ºÎºÐÀ» ¾ø¾Ö¹ö¸®¸é...) ±×·¯³ª.. »ó¼Ó¹ÞÀ¸¸é ÀüÇô ¾û¶×ÇÑ °á°ú°¡ ÃÊ·¡µÈ´Ù. Circle::Show(), Circ le::Hide()°¡ ¾Æ´Ñ Point::Hide(), Point()::Show()ÇÔ¼ö¸¸ Ç×»ó È£ÃâµÇ¾îÁø ´Ù. (¡ñ Á¤Àû¹ÙÀεù¿¡ ÀÇÇؼ­!) ¶È°°Àº ³»¿ëÀ» °¡Áø ÇÔ¼öÀÌÁö¸¸, ±× ÇÔ¼ö ³»ºÎ¿¡¼­ ´Ù½Ã È£ÃâµÇ´Â ÇÔ¼ö´Â ÀüÇô Ʋ¸° °ÍÀÌ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­´Â.. À§¿Í °°ÀÌ ¿À¹ö·Îµù½ÃÅ°¸é µÇÁö¸¸, °£´ÜÈ÷ ÇØ°áÇعö¸®´Â ¼ö°¡ ÀÖ´Ù. ÀÏ´Ü, Circle Ŭ·¡½º ³»ÀÇ Moveto()ÇÔ¼ö¸¦ ¸»¼Ò½Ã Äѹö¸° ÈÄ, Point³»ÀÇ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ °¡»óÇÔ¼ö·Î Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. # °¡»óÇÔ¼ö Á¤Àǽÿ¡´Â ¿¹¾à¾î virtualÀ» »ç¿ëÇÑ´Ù. ~~~~~~~ class Point { . : virtual void Show() { ... } virtual void Hide() { ... } : } ÀÌ·¸°Ô Çعö¸®¸é µ¿Àû¹ÙÀεùÀ» ÇÏ°Ô µÇ¾î, ½ÇÇà½Ã¿¡ ÇÔ¼öÀÇ ¹ÙÀεùÀÌ ÀÌ·ç¾î Áø´Ù. ÀÌ·¸°Ô µÇ¸é Moveto()ÇÔ¼ö¸¦ È£ÃâÇÑ °´Ã¼°¡ ¾î¶² Ŭ·¡½º ¼Ò¼ÓÀΰ¡¿¡ µû ¶ó¼­ ½ÇÇà½Ã¿¡ È£ÃâµÇ´Â ÇÔ¼ö°¡ °áÁ¤µÈ´Ù. Áï, PointÇü °´Ã¼°¡ Moveto()¸¦ È£ ÃâÇϸé Point Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öµéÀÌ È£ÃâµÇ°í, CircleÇü °´Ã¼°¡ Moveto()¸¦ È£ÃâÇϸé Circle Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öµéÀÌ È£ÃâµÈ´Ù. ±×¸®°í,¼±Á¶¿¡¼­ °¡»óÇÔ¼ö¸¦ 1¹ø ¼±¾ðÇØÁÖ¸é Èļտ¡ ÀÖ´Â ÇÔ¼öµµ ÀÚµ¿ÀûÀ¸ ±×¸®°í,¼±Á¶¿¡¼­ °¡»óÇÔ¼ö¸¦ 1¹ø ¼±¾ðÇØÁÖ¸é Èļտ¡ ÀÖ´Â ÇÔ¼öµµ ÀÚµ¿ÀûÀ¸ ·Î virtualÇüÀÌ µÇ¹Ç·Î, ±»ÀÌ ´Ù½Ã ¼±¾ðÇØÁÙ ÇÊ¿ä´Â ¾ø´Ù. * °¡»óÇÔ¼öÀÇ ÀçÁ¤ÀÇ °¡»óÇÔ¼ö´Â Èļտ¡¼­ ¼±Á¶¿Í ´Ù¸¥ ÇüÅ·ΠÀçÁ¤ÀÇ µÉ ¼ö ÀÖ´Ù. ±× ÀÌÈÄ¿¡ °è½ÂµÇ´Â ÈļÕÀÌ ÀÖ´Ù¸é ÀçÁ¤ÀÇµÈ °¡»óÇÔ¼ö°¡ °è½ÂµÈ´Ù. ´Ü, ¹Ýµå½Ã ¼±Á¶ÀÇ °¡»óÇÔ¼ö¿Í ÇÔ¼öÀÇ ÇüÀÌ °°¾Æ¾ßÇÑ´Ù. ¨ç Èļտ¡¼­ ¼±Á¶ÀÇ °¡»óÇÔ¼ö¿Í ÀÎÀÚÀÇ ÇüÀÌ Æ²¸®°Ô ÀçÁ¤ÀÇÇÑ °æ¿ì -> ¿À¹ö·Îµù¿¡ ÀÇÇؼ­ ¼±Á¶ÀÇ °ÍÀÌ ¹«½ÃµÇ°í »õ·Î¿î ÇÔ¼ö°¡ ¸¸µé¾îÁø´Ù. ¨è ¸®ÅÏ°ªÀÌ Æ²¸° °æ¿ì ->´ÙÇü¼º¿¡ ¾î±ß³ª¹Ç·Î ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. . . PRESENTED by . * __ ____ ____. ____ ____* ____ the / |/ ___|/ ___|| ___|/ _*|/ __| registered / / | |___ |___ | _| \_*_ \\___ \ trademark of /_/|_|\____|\____||____*|____/|____/ MicroSoft Inc. -1995- . * * * Ãâ·ÂÀÌ ³¡³µ½À´Ï´Ù. [Enter]¸¦ ´©¸£½Ê½Ã¿À.