C¿Í C++°ü·Ã

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   Virtual Function 1998/07/15 (09:52)
À̸§ ±èÈ¿¿ø
¹øÈ£ 8
Á¶È¸ 630
º»¹® < °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö : Virtual Functions >

°£È¤ static bindingÀ̶ó°íµµ ÇÏ´Â Ãʱâ¹ÙÀεù(early binding)Àº
È£ÃâÇÑ ÇÔ¼ö¸¦ ÄÄÆÄÀÏÇÒ¶§ °áÁ¤ÇÏ´Â ÇÁ·Î¼¼½ºÀÌ´Ù. ¸ðµç CÇÁ·Î±×·¥Àº
¸ðµç ÇÔ¼ö¿Í ¼­ºê·çƾ ÇÔ¼ö È£ÃâÀ» À§ÇØ Ãʱ⠹ÙÀεùÀ» »ç¿ëÇÑ´Ù.

C++Àº ½ÇÇàÀ» À§ÇØ ÇÁ·Î±×·¥ÀÌ ¸Þ¸ð¸®ÀÇ ¾îµð¿¡ ·ÎµåµÉ °ÍÀÎÁö
ÄÄÆÄÀÏ ½Ã°£¿¡´Â ¾Ë ¼ö ¾ø´Ù. ½ÇÇàµÉ ÄÄÇ»ÅÍ ±¸¼º¿¡ µû¶ó ù¹ø°
»ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸® ÁÖ¼Ò´Â ´Ù¸£±â ¶§¹®ÀÌ´Ù.
±×·¡¼­, C++Àº ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÒ¶§ ÄÄÆÄÀÏ È­ÀÏ ¾È¿¡ ¼øÂ÷ÀûÀ¸·Î
ÄÄÆÄÀÏµÈ È­ÀÏÀ» ÃàÀûÇÑ´Ù. main()ÇÔ¼ö°¡ È£ÃâµÈ ÈÄ¿¡, ±×·ÎºÎÅÍ
»ó´ëÀûÀÎ À§Ä¡¸¦ ±â¾ïÇÏ´Â °ÍÀÌ´Ù.

ÇÁ·Î±×·¥À» ½ÇÇàÇÒ¶§ .EXE ÇÁ·Î±×·¥ ·Î´õ´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¼ö
ÀÖ°í ¸ðµç ÇÔ¼ö È£Ãâ¿¡ ±× ÁÖ¼Ò¸¦ ´õÇÒ ¼ö ÀÕ´Â ¸Þ¸ð¸®¿¡¼­ ù¹ø°
°¡´ÉÇÑ ÀÚÀ¯ °ø°£À» °áÁ¤ÇÑ´Ù. µû¶ó¼­, ÄÄÆÄÀϵɶ§ ¸ðµç ÁÖ¼ÒµéÀº
»ó´ëÀûÀÌ°í, ½ÇÇàµÉ ¶§´Â Àý´ëÀûÀÌ µÈ´Ù.

Áö¿¬¹ÙÀεù(late binding)Àº ÇÁ·Î±×·¥ÀÌ ½ÇÁ¦·Î ½ÇÇàµÉ ¶§±îÁö
ÇÔ¼ö È£Ãâ¿¡ ¾Æ¹«°Íµµ ÀúÀåµÇÁö ¾ÊÀ»¶§ ¹ß»ýÇÑ´Ù.
Áö¿¬¹ÙÀεùÀº ÇÁ·Î±×·¥ÀÇ ÁÖ¾îÁø ÁöÁ¡¿¡¼­ ÇÔ¼ö¸¦ È£ÃâÇÒ ÇÔ¼ö¸¦
°áÁ¤Çϱâ À§ÇØ ½ÇÇà½Ã°£±îÁö ±â´Ù¸®´Â ÇÁ·Î¼¼½ºÀÌ´Ù.

void (*fun[])(float)={doSin,doCos,doTan};
void doSin(float num);
void doCos(float num);
void doTan(float num);

°ú °°ÀÌ, ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÒ¶§.

fun[str](number);

¶ó°í È£ÃâÇϸé, ÄÄÆÄÀÏ·¯´Â ÄÄÆÄÀÏÇÒ ´ç½Ã¿¡, ¾Æ¹«·± ÁÖ¼Òµµ »ðÀÔÇÒ
¼ö ¾ø°Ô µÈ´Ù. ½ÇÇà½Ã°£±îÁö ¼¼°³ÀÇ ÇÔ¼öÁß¿¡¼­ ¾î¶² °ÍÀ¸·Î
°áÁ¤ÇÒ ¼ö°¡ ¾ø°Ô µÈ´Ù.


°¡»óÇÔ¼ö(Virtual Function)Àº OOP¸¦ À§ÇØ Áö¿¬ ¹ÙÀεù ü°è¸¦
Á¦°øÇÑ´Ù. ½ÇÇà½Ã°£¿¡ ÇÁ·Î±×·¥ÀÌ È£ÃâÇÒ ÇÔ¼ö¸¦ °áÁ¤ÇÑ´Ù.
°¡»óÇÔ¼ö°¡ ÇÊ¿äÇÒ ¶§´Â ´ÙÀ½°ú °°´Ù.

'Ŭ·¡½º ±ºÀ¸·ÎºÎÅÍ ¸î°³ÀÇ °´Ã¼¸¦ Á¤ÀÇÇÒ¶§, ±×¸®°í ±º ³»ÀÇ
Çϳª ÀÌ»óÀÇ Å¬·¡½º°¡ °øÅë À̸§À» °¡Áø ÇÔ¼öµéÀ» Æ÷ÇÔÇÒ¶§,
°¡»óÇÔ¼ö¸¦ »ç¿ëÇÏÀÚ.'

Base Class :
Building
public prData();

ÆÄ»ý Class:
Office
public prData();

ÆÄ»ý ClassÀÎ Office°´Ã¼¿¡ ´ëÇÏ¿©, prData()¸¦ ½ÇÇàÇϸé,
Office°´Ã¼ ³»ÀÇ prData()°¡ ½ÇÇàµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó,
Base ClassÀÎ Building°´Ã¼ ³»ÀÇ prData()°¡ ½ÇÇàµÈ´Ù.
ÀÌ°ÍÀÌ °¡»ó ÇÔ¼öÀÇ Çʿ伺À» ¸»ÇØÁÖ°í ÀÖ´Ù.

ÀÌ ¹®Á¦´Â Ãʱ⠹ÙÀεùÀÌ ¿øÀÎÀÌ´Ù. ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦
ÄÄÆÄÀϽÿ¡ °áÁ¤Çϱ⠶§¹®¿¡, ¾î´À Ŭ·¡½º¿¡ ¼ÓÇÑ ÇÔ¼ö¸¦
°¡¸®Å°´ÂÁö¸¦ Á¦´ë·Î °áÁ¤ÇÒ ¼ö°¡ ¾ø°Ô µÈ´Ù.

ÇÔ¼ö¾Õ¿¡ virtualÀ̶ó´Â Å°¿öµå¸¦ Æ÷ÇÔÇÏ°Ô µÇ¸é,
*this°´Ã¼°¡ ±â¹Ý Ŭ·¡½º¿¡¼­ ³ª¿Â °ÍÀ̶ó¸é, ±â¹ÝŬ·¡½ºÀÇ
ÇÔ¼ö¸¦ È£ÃâÇϸç, ÆÄ»ý Ŭ·¡½º(°°Àº À̸§ÀÇ ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ´Â)
¿¡¼­ ³ª¿Â °ÍÀ̶ó¸é, ÆÄ»ý Ŭ·¡½º ³»ÀÇ ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÈ´Ù.
¹°·Ð, °°Àº À̸§ÀÇ ÇÔ¼ö¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â ÆÄ»ý Ŭ·¡½º¶ó¸é,
±â¹Ý Ŭ·¡½º³»ÀÇ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
virtualÅ°¿öµå´Â ±â¹Ý Ŭ·¡½ºÀÇ ÇÔ¼ö ¼±¾ð¿¡¸¸ Ãß°¡ÇÏ¸é µÈ´Ù.

virtual void prData(void); // in base Class

¶§·Î´Â, ±â¹Ý Ŭ·¡½º °¡»ó ÇÔ¼ö°¡ Äڵ带 Æ÷ÇÔÇÏÁö ¾ÊÀ¸¸ç,
ÈÄ¼Ó Å¬·¡½º¸¦ ÆÄ»ýÇϱâ À§Çؼ­¸¸ Á¸ÀçÇÒ ¶§, pure virtual
function(¼ø¼ö °¡»ó ÇÔ¼ö)¶ó°í ºÒ¸°´Ù. À̶§´Â ¼ø¼ö °¡»ó ÇÔ¼ö¸¦
Æ÷ÇÔÇϴ Ŭ·¡½º·ÎºÎÅÍ´Â °´Ã¼¸¦ Çü¼ºÇÒ ¼ö ¾ø´Ù.
¼ø¼ö °¡»ó ÇÔ¼ö¸¦ °¡Áø ±â¹Ý Ŭ·¡½º´Â Ãß»óÀûÀÌ°í, ³ª¸ÓÁö »ó¼Ó
±ºÀÇ ¸ðÇüÀ̱⠶§¹®¿¡ abstract base class(Ãß»ó ±â¹Ý Ŭ·¡½º)
¶ó°í Çϸç, °´Ã¼¸¦ Çü¼ºÇϱâ À§Çؼ­´Â °áÄÚ »ç¿ëµÉ ¼ö ¾ø´Ù.

virtual void prData(void)=0;

¶ó´Â ¼±¾ðÀ» »ç¿ëÇϸé, ÄÄÆÄÀÏ·¯°¡ ±â¹Ý Ŭ·¡½º °´Ã¼¸¦
Çü¼ºÇÒ ¼ö ¾øÀ¸¹Ç·Î, ÄÄÆÄÀÏ ½Ã¿¡ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
'=0'À» Ãß°¡ÇÏÁö ¾ÊÀ¸¸é, ½ÇÇà ½Ã°£ ¿¡·¯°¡ ³ª¹Ç·Î,
debugÇϱⰡ ´õ ¾î·Æ´Ù.

<È¿À²¼ºÀÇ ¹®Á¦>
½ÇÇà½Ã°£¿¡ ÁÖ¼Ò¸¦ ºÐ¼®Çϱâ À§ÇØ °£Á¢ ÇÔ¼ö È£Ãâ Ç¥ÀÇ Á¤±³ÇÑ
½Ã½ºÅÛÀ» »ç¿ëÇØ¾ß Çϸé, vtableÀ̶ó°í ÇÏ´Â, °¡»ó ÇÔ¼ö
ÁÖ¼ÒÀÇ Ç¥´Â ´ÙÇüÀûÀ¸·Î È£ÃâµÉ ¼ö ÀÖ´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¦
Æ÷ÇÔÇÑ´Ù. °¢ Ŭ·¡½º´Â vtableÀÇ º¹»çº»À» °¡Áö¸ç, ÇÁ·Î±×·¥ÀÌ
½ÇÇàµÉ¶§ »ó¼Ó °èÃþ¿¡¼­ Á¤È®ÇÑ ¸â¹ö ÇÔ¼ö¸¦ ã±â À§Çؼ­
vtableÀº Áß°£ ¸Å°³Ã¼·Î »ç¿ëµÈ´Ù.

°¡»ó ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀÏ¹Ý ¸â¹ö ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÏ´Â
°Íº¸´Ù ´ú È¿À²ÀûÀÓÀº »ç½ÇÀÌ´Ù. Ŭ·¡½ºµé »çÀÌ¿¡¼­ ¸ðµç
¸â¹ö ÇÔ¼ö¸¦ ´Ù¸£°Ô ¸í¸íÇÏ´Â °Í ¶ÇÇÑ ¼Ò½ºÀÇ ºñÈ¿À²¼ºÀ»
Áõ°¡½Ãų ¼ö ÀÖÀ¸¹Ç·Î, ±â¹Ý Ŭ·¡½º ÇÔ¼ö ¾Õ¿¡ virtualÀ»
»ðÀÔÇÏ´Â ¹®Á¦¸¦ ½ÅÁßÈ÷ »ý°¢ÇØ¾ß ÇÑ´Ù.

ÀÌ·± °¡»ó ÇÔ¼öÀÇ ºñÈ¿À²ÀûÀΠƯ¼ºÀº C++ ¼³°èÀÚµéÀÌ ¿Ö
¸ðµç ±â¹Ý Ŭ·¡½º ÇÔ¼ö¸¦ À§ÇØ virtualÀ» default·Î
ÇÏÁö ¾Ê¾Ò´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù.

HomePage Backward Forward Post Reply List
1998 by swindler