30-2-¶ó.°¡»ó ÆÄ±«ÀÚ

±â¹Ý Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ´Â ¹Ýµå½Ã °¡»óÀ¸·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ¿Ö ÆÄ±«ÀÚ´Â °¡»ó ÇÔ¼ö¿©¾ß ÇÏ´ÂÁö ¾ÆÁÖ °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸°í ÆÄ±«ÀÚ°¡ °¡»óÀÌ ¾Æ´Ò ¶§ ¾î¶² ¹®Á¦°¡ ¹ß»ýÇÏ´ÂÁö º¸ÀÚ.

 

¿¹ Á¦ : VirtDestructor

#include <Turboc.h>

 

class Base

{

private:

     char *B_buf;

public:

     Base() { B_buf=new char[10];puts("Base »ý¼º"); }

     ~Base() { delete [] B_buf;puts("Base ÆÄ±«"); }

};

 

class Derived : public Base

{

private:

     int *D_buf;

public:

     Derived() { D_buf=new int[32];puts("Derived »ý¼º"); }

     ~Derived() { delete [] D_buf;puts("Derived ÆÄ±«"); }

};

 

void main()

{

//  Derived D;

     Base *pB;

 

     pB=new Derived;

     delete pB;

}

 

BaseÀÇ »ý¼ºÀÚ´Â Å©±â 10ÀÇ ¹®ÀÚÇü ¹è¿­À» µ¿ÀûÀ¸·Î ÇÒ´çÇÏ¸ç ÆÄ±«ÀÚ¿¡¼­ ÀÌ ¹è¿­À» ÇØÁ¦ÇÑ´Ù. Base·ÎºÎÅÍ »ó¼Ó¹ÞÀº Derived´Â »ý¼ºÀÚ¿¡¼­ Å©±â 32ÀÇ Á¤¼öÇü ¹è¿­À» ÇÒ´çÇÏ¸ç ¸¶Âù°¡Áö·Î ÆÄ±«ÀÚ¿¡¼­ ÇØÁ¦ÇÑ´Ù. °¢ Ŭ·¡½º°¡ µ¿Àû ÇÒ´çÀ» Çϰí ÀÖÁö¸¸ ÆÄ±«ÀÚ¿¡¼­ ÇÒ´çµÈ ¹è¿­À» Á¦´ë·Î ÇØÁ¦Çϰí ÀÖÀ¸¹Ç·Î ¸Þ¸ð¸® ´©¼ö´Â ¾øÀ» °Í °°´Ù.

°ú¿¬ ±×·±Áö main¿¡ Derived D; ¼±¾ð¹®¸¸ ³²°Ü ³õ°í ½ÇÇàÇØ º¸ÀÚ. °¢ Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿Í ÆÄ±«ÀÚ´Â ÀÚ½ÅÀÌ È£ÃâµÇ¾úÀ½À» ¾Ë¸®±â À§ÇØ ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. D °´Ã¼°¡ »ý¼ºµÉ ¶§´Â ºÎ¸ðÀÇ »ý¼ºÀÚ°¡ ¸ÕÀú È£ÃâµÇ°í ÀÚ½ÅÀÇ »ý¼ºÀÚ°¡ ½ÇÇàµÇ¸ç ÆÄ±«µÉ ¶§´Â ¹Ý´ë ¼ø¼­·Î ÆÄ±«ÀÚ°¡ È£ÃâµÈ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

Base »ý¼º

Derived »ý¼º

Derived ÆÄ±«

Base ÆÄ±«

 

»ý¼ºÀÚ¿Í ÆÄ±«ÀÚÀÇ È£ÃâÀÌ ¾ÆÁÖ Á¤»óÀûÀÌ´Ù. D °´Ã¼°¡ ¿ÏÀüÈ÷ »ý¼ºµÇ¾úÀ» ¶§ ÀÌ °´Ã¼´Â Å©±â 10ÀÇ char ¹è¿­°ú Å©±â 32ÀÇ int ¹è¿­À» ¼ÒÀ¯ÇÒ °ÍÀ̸ç ÀÌ ¹è¿­µéÀº »ý¼ºµÈ ¿ª¼øÀ¸·Î ÆÄ±«ÀÚ¿¡¼­ Â÷·Ê´ë·Î ÇØÁ¦µÈ´Ù. ±×·¯³ª ¿©±â¿¡ Æ÷ÀÎÅͰ¡ °³ÀÔµÇ¸é ¹®Á¦°¡ ´Þ¶óÁø´Ù. new ¿¬»êÀÚ·Î DerivedÀÇ °´Ã¼¸¦ ¸¸µé°í ±× Æ÷ÀÎÅ͸¦ Base * ŸÀÔÀÇ pB¿¡ ´ëÀÔÇϸé Derived°¡ »ý¼ºµÉ ¶§ ºÎ¸ð¿Í ÀÚ½ÅÀÇ »ý¼ºÀÚ°¡ Â÷·Ê´ë·Î È£ÃâµÇ¾î µÎ °³ÀÇ ¹öÆÛ¸¦ µ¿ÀûÀ¸·Î ÇÒ´çÇÒ °ÍÀÌ´Ù.

±×·¯³ª delete pB·Î ÀÌ °´Ã¼¸¦ ÇØÁ¦ÇÒ ¶§´Â ºÎ¸ðÀÇ ÆÄ±«ÀÚ¸¸ È£ÃâµÇ´Âµ¥ ¿Ö³ÄÇϸé pB°¡ Base * ŸÀÔÀ̱⠶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍÀÇ Å¸ÀÔ¿¡ µû¶ó ÆÄ±«ÀÚ°¡ Á¤ÀûÀ¸·Î °áÇյǴ٠º¸´Ï ½ÇÁ¦·Î ÆÄ±«µÇ´Â °´Ã¼´Â Derived ŸÀÔÀÌÁö¸¸ DerivedÀÇ ÆÄ±«ÀÚ°¡ È£ÃâµÇÁö ¸øÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ºÎ¸ð°¡ ÇÒ´çÇÑ char ¹è¿­Àº Àß ÇØÁ¦µÇÁö¸¸ Derived°¡ ÇÒ´çÇÑ int ¹è¿­Àº ÇØÁ¦µÇÁö ¸øÇÏ´Â ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇÑ´Ù. ½ÇÇàÇØ º¸¸é DerivedÀÇ ÆÄ±«ÀÚ°¡ È£ÃâµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

Base »ý¼º

Derived »ý¼º

Base ÆÄ±«

 

ÀÌ·¸°Ô µÇ¸é Derived°¡ ÇÒ´çÇÑ 32¹ÙÀÌÆ®´Â ȸ¼ö ºÒ°¡´ÉÇÏ´Ù. ¸Þ¸ð¸®¸¸ Á¶±Ý ÀÒ¾î¹ö¸°´Ù¸é¾ß ½É°¢ÇÑ Á¤µµ´Â ¾Æ´ÏÁö¸¸ Çϵå¿þ¾î ȯ°æ º¯°æ, ³×Æ®¿öÅ© ¿¬°á, ½º·¹µå »ý¼º µîÀÇ ´õ Áß¿äÇÑ ÀÏÀ» Çß´Ù¸é Ä¡¸íÀûÀÎ °á°ú¸¦ ÃÊ·¡ÇÒ ¼öµµ ÀÖ´Ù. ¹®Á¦°¡ ¹«¾ùÀÎÁö¸¦ ¾Ë¾ÒÀ¸¹Ç·Î ÇØ°áÇÏ´Â °ÍÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. ÆÄ±«ÀÚ°¡ µ¿Àû °áÇÕÀ» Çϵµ·Ï °¡»ó ÇÔ¼ö·Î ¸¸µé¸é µÈ´Ù. Base¿¡¸¸ virtualÀ» ºÙ¿©µµ µÇÁö¸¸ °¡±ÞÀûÀÌ¸é µÑ ´Ù ºÙÀÌ´Â °ÍÀÌ ÁÁ´Ù.

 

virtual ~Base() { delete [] B_buf;puts("Base ÆÄ±«"); }

....

virtual ~Derived() { delete [] D_buf;puts("Derived ÆÄ±«"); }

 

ÀÌ·± ÀÌÀ¯·Î ±â¹Ý Ŭ·¡½º·Î »ç¿ëµÉ °¡´É¼ºÀÌ Àִ Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ´Â Ç×»ó °¡»ó ÇÔ¼ö·Î ¼±¾ðÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¹°·Ð ÆÄ±«ÀÚ¿¡¼­ Ưº°ÇÑ Á¤¸® ÀÛ¾÷À» ÇÒ Çʿ䰡 ¾ø´Ù°Å³ª ÆÄ»ýµÇÁö ¾Ê´Â Ŭ·¡½º¶ó¸é ±»ÀÌ ´À¸° °¡»ó ÆÄ±«ÀÚ¸¦ ¾²Áö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ÇÏÁö¸¸ ´çÀåÀº ÇÊ¿äÄ¡ ¾Ê´Ù ÇÏ´õ¶óµµ Ŭ·¡½º¶õ ¾ðÁ¦µçÁö È®ÀåµÉ ¼ö ÀÖ°í ´©°¡ ¾ðÁ¦ ÀÌ Å¬·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀ»Áö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ °¡±ÞÀûÀÌ¸é ÆÄ±«ÀÚ´Â °¡»óÀ¸·Î ¼±¾ðÇØ µÎ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù. ±×·¡¾ß Æ÷ÀÎÅͷκÎÅÍ »èÁ¦Çصµ ±ú²ýÇÏ°Ô »èÁ¦µÇ¸ç ¾ðÁ¦µçÁö Ŭ·¡½º¸¦ ¾È½ÉÇϰí È®ÀåÇÒ ¼ö ÀÖ´Ù.

¾Õ Àå¿¡¼­ ¸¸µé¾ú´ø Person Ŭ·¡½ºµµ µ¿Àû ÇÒ´çÀ» »ç¿ëÇϹǷΠÀÌ Å¬·¡½ºÀÇ ÆÄ±«ÀÚµµ ´ç¿¬È÷ °¡»óÀ̾î¾ß ÇÏ¸ç »ó¼ÓÀ» °í·ÁÇÏ¿© private´Â protected·Î ¹Ù²Ù´Â °ÍÀÌ ÁÁ´Ù. ´çÀåÀº PersonÀÌ È¦·Î ¾²ÀÌ´õ¶óµµ ¾ðÁ¦ ÀÌ Å¬·¡½º·ÎºÎÅÍ Boy, Girl µûÀ§ÀÇ Å¬·¡½º°¡ ÆÄ»ýµÉÁö ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ÆÄ±«ÀÚ¿¡ ºñÇØ »ý¼ºÀÚ´Â °¡»óÀÌ ¾Æ´Ï¾îµµ »ó°ü¾øÀ¸¸ç °¡»óÀ¸·Î ¼±¾ðÇÒ ¼öµµ ¾ø´Ù. ¿Ö³ÄÇÏ¸é °´Ã¼¸¦ »ý¼ºÇÒ ¶§´Â °´Ã¼ÀÇ Å¸ÀÔÀ» ºÐ¸íÈ÷ ¸í½ÃÇϹǷΠ¾î¶² »ý¼ºÀÚ°¡ È£ÃâµÉÁö Á¤È®ÇÏ°Ô °áÁ¤ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Person3 ¿¹Á¦ÀÇ ÆÄ±«ÀÚ¸¦ °¡»óÀ¸·Î ¼±¾ðÇϵµ·Ï ÇÏÀÚ.

 

virtual ~Person() {

     delete [] Name;

}

 

±×¸®°í ÆÄ»ý Ŭ·¡½º¿¡¼­ Name, Age¸¦ ÀÐÀ» ¼ö ÀÖµµ·Ï protected·Î ¾×¼¼½º ÁöÁ¤À» º¯°æÇÑ´Ù. ÀÌÁ¦ µåµð¾î Person Ŭ·¡½º°¡ ¿Ïº®ÇØÁ³´Ù. »ý¼ºÀÚ, ÆÄ±«ÀÚ¿¡¼­ µ¿Àû ¹öÆÛ¸¦ Àß °ü¸®Çϰí ÀÖÀ¸¸ç º¹»ç »ý¼º, ´ëÀÔ ¿¬»ê¿¡ ´ëÇØ¼­µµ ¾ÈÀüÇÏ°Ô »çº»À» ÀÛ¼ºÇÏ¸ç »ó¼Ó °ü°è¿¡¼­ »ç¿ëµÉ ¼öµµ ÀÖ´Ù. Person Ŭ·¡½º¸¦ Á¦´ë·Î ¸¸µé±â À§ÇØ ±²ÀåÈ÷ ±ä ½Ç½À °úÁ¤À» °ÅÃÆ´Âµ¥ ÀÌ Å¬·¡½º È®Àå °úÁ¤Àº C++ Çʼö ¹®¹ýÀ» ¸ðµÎ Æ÷ÇÔÇϹǷΠÇÑ ¹øÂë ÃÑ Á¤¸®¸¦ ÇØ µÎ´Â °ÍÀÌ ÁÁ´Ù.