33-2-³ª.static_cast

static_cast ¿¬»êÀÚ´Â ÁöÁ¤ÇÑ Å¸ÀÔÀ¸·Î º¯°æÇϴµ¥ ¹«Á¶°Ç º¯°æÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ³í¸®ÀûÀ¸·Î º¯È¯ °¡´ÉÇÑ Å¸ÀÔ¸¸ º¯È¯ÇÑ´Ù. ±âº» ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.

 

static_cast<ŸÀÔ>(´ë»ó)

 

< > °ýÈ£¾È¿¡ ¿øÇϴ ŸÀÔÀ» Àû°í ( ) °ýÈ£¾È¿¡ ij½ºÆÃÇÒ ´ë»óÀ» Àû´Â´Ù. Áï (´ë»ó) º¯¼ö¸¦ <ŸÀÔ>ÇüÀ¸·Î °­Á¦·Î ¹Ù²Ù´Â µ¿ÀÛÀ» ÇÑ´Ù. ³ª¸ÓÁö C++ ij½ºÆ® ¿¬»êÀÚµµ ±âº» Çü½ÄÀº ÀÌ¿Í µ¿ÀÏÇÏ´Ù. °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : static_cast

#include <Turboc.h>

 

void main()

{

     char *str="korea";

     int *pi;

     double d=123.456;

     int i;

 

     i=static_cast<int>(d);                  // °¡´É

     pi=static_cast<int *>(str);            // ¿¡·¯

     pi=(int *)str;                          // °¡´É

}

 

½Ç¼öÇüÀÇ d¸¦ Á¤¼öÇüÀ¸·Î ij½ºÆÃÇϰųª ¹Ý´ë·Î ½Ç¼öÇü º¯¼ö¸¦ Á¤¼öÇüÀ¸·Î ij½ºÆÃÇÏ´Â °ÍÀº Çã¿ëµÈ´Ù. ¶ÇÇÑ »óÈ£ ȣȯµÇ´Â ¿­°ÅÇü°ú Á¤¼öÇü°úÀÇ º¯È¯, double°ú floatÀÇ º¯È¯ µîµµ Çã¿ëµÈ´Ù. ±×·¯³ª Æ÷ÀÎÅÍÀÇ Å¸ÀÔÀ» ´Ù¸¥ °ÍÀ¸·Î º¯È¯ÇÏ´Â °ÍÀº Çã¿ëµÇÁö ¾ÊÀ¸¸ç ÄÄÆÄÀÏ ¿¡·¯·Î 󸮵ȴÙ. À§ÇèÇÑ Ä³½ºÆ® ¿¬»êÀ» ÄÄÆÄÀÏ Áß¿¡ ¾Ë·Á ÁÜÀ¸·Î½á ½Ç¼ö¸¦ ¹æÁöÇÒ ¼ö ÀÖ´Ù. ÀÌ¿¡ ºñÇØ CÀÇ Ä³½ºÆ® ¿¬»êÀÚ´Â ³Ê¹« ³Ê¹« Ä£ÀýÇØ¼­ ¾ðÁ¦³ª OKÀÌ°í ±×·¯´Ù º¸´Ï ÇÁ·Î±×·¥ÀÌ ¾ðÁ¦ KO´çÇÒÁö ¸ð¸¥´Ù. Æ÷ÀÎÅͳ¢¸® ŸÀÔÀ» º¯È¯ÇÒ ¶§´Â »ó¼Ó °ü°è¿¡ ÀÖ´Â Æ÷ÀÎÅͳ¢¸®¸¸ º¯È¯ÀÌ Çã¿ëµÇ¸ç »ó¼Ó °ü°è°¡ ¾Æ´Ñ Æ÷ÀÎÅͳ¢¸®´Â º¯È¯À» °ÅºÎÇÑ´Ù.

 

¿¹ Á¦ : static_cast2

#include <Turboc.h>

 

class Parent { };

class Child : public Parent { };

 

void main()

{

     Parent P,*pP;

     Child C,*pC;

     int i=1;

 

     pP=static_cast<Parent *>(&C);         // °¡´É

     pC=static_cast<Child *>(&P);      // °¡´ÉÇÏÁö¸¸ À§Çè

     pP=static_cast<Parent *>(&i);     // ¿¡·¯

     pC=static_cast<Child *>(&i);       // ¿¡·¯

}

 

Parent¿Í Child´Â »ó¼Ó °ü°è¿¡ Àִ Ŭ·¡½ºÀÌ´Ù. ¸ÕÀú Á¦ÀÏ ¾Æ·¡ÂÊÀÇ º¯È¯À» º¸ÀÚ. Á¤¼öÇü Æ÷ÀÎÅÍ »ó¼ö &i¸¦ Parent * ŸÀÔÀ¸·Î º¯È¯Çϰųª Child * ŸÀÔÀ¸·Î º¯È¯ÇÏ´Â °ÍÀº ±ÝÁöµÈ´Ù. int´Â Child, Parent¿Í »ó¼Ó °ü°è¿¡ ÀÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¸¸¾à ÀÌ º¯È¯À» Çã°¡Çϸé pP·Î ParentÀÇ ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÒ ¼öµµ ÀÖÀ»ÅÙµ¥ Á¤¼öÇü º¯¼ö°¡ ÀÌ·± ¸â¹ö ÇÔ¼ö¸¦ °¡ÁöÁö ¾ÊÀ¸¹Ç·Î ÀÌ»ó µ¿ÀÛÇÒ °ÍÀÌ´Ù.

»ó¼Ó °ü°è¿¡ Àִ Ŭ·¡½º Æ÷ÀÎÅͳ¢¸®´Â »óÈ£ ŸÀÔ º¯È¯ÇÒ ¼ö ÀÖ´Ù. ù ¹øÂ° ÁÙÀº ÀÚ½Ä °´Ã¼ÀÇ ¹øÁö¸¦ ºÎ¸ðÇüÀÇ Æ÷ÀÎÅÍ·Î ¾÷ ij½ºÆÃ(UpCasting)ÇÑ´Ù. »ó¼Ó °èÃþÀÇ À§ÂÊÀ¸·Î À̵¿ÇÏ´Â º¯È¯À» ¾÷ ij½ºÆÃÀ̶ó°í ÇÑ´Ù. »ç½Ç ÀÌ º¯È¯Àº ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ Ç×»ó °¡´ÉÇÑ ´ëÀÔÀÌ¸ç ¾ðÁ¦³ª ¾ÈÀüÇÏ´Ù. ¿Ö³ÄÇϸé pP·Î °¡¸®Å³ ¼ö ÀÖ´Â ¸â¹ö º¯¼ö³ª ¸â¹ö ÇÔ¼ö´Â Ç×»ó C¿¡ Æ÷ÇԵǾî Àֱ⠶§¹®ÀÌ´Ù. ij½ºÆ® ¿¬»êÀÚ¾øÀÌ pP=&C;¶ó°í °íÃĵµ Àß ÄÄÆÄÀϵȴÙ.

µÎ ¹øÂ° ÁÙÀº ºÎ¸ð °´Ã¼ÀÇ ¹øÁö¸¦ ÀÚ½Ä °´Ã¼ÀÇ Æ÷ÀÎÅÍ·Î ´Ù¿î ij½ºÆÃ(DownCasting)ÇÑ´Ù. »ó¼Ó °èÃþÀÇ ¾Æ·¡ÂÊÀ¸·Î À̵¿Çϱ⠶§¹®¿¡ ´Ù¿î ij½ºÆÃÀ̶ó°í Çϴµ¥ À̴ ij½ºÆ® ¿¬»êÀÚÀÇ µµ¿ò ¾øÀÌ´Â Çã°¡µÇÁö ¾Ê´Â´Ù. ºÎ¸ð °´Ã¼°¡ ÀÚ½Ä Å¬·¡½ºÀÇ ¸ðµç ¸â¹ö¸¦ °¡Áö°í ÀÖÁö ¾ÊÀ¸¹Ç·Î ÀÌ´Â ¹«Ã´ À§ÇèÇÑ º¯È¯ÀÌ´Ù. static_cast´Â ½ÇÇàÁß¿¡ ŸÀÔ Ã¼Å©¸¦ ÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÌ º¯È¯ÀÌ À§ÇèÇÏ´Ù´Â °Í±îÁö´Â ¸ð¸£¹Ç·Î ÀÏ´ÜÀº Çã¿ëÇÑ´Ù.

ÀÌ º¯È¯Àº ¾ÆÁÖ À§ÇèÇØÁú ¼ö Àִµ¥ pC·Î ºÎ¸ð¿¡°Ô ¾ø´Â ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÒ °æ¿ì ¾î¶»°Ô µÉÁö ¿¹ÃøÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ¹°·Ð PC·Î »ó¼Ó¹ÞÀº ¸â¹ö¸¸ ÂüÁ¶ÇÑ´Ù¸é ¾ÈÀüÇϰÚÁö¸¸ Æ÷ÀÎÅ͸¦ °¡Áø ÀÌ»ó ¾î¶² ¸â¹ö¸¦ ÂüÁ¶ÇÒÁö ¾Ë ¼ö ¾ø´Ù. ¹Ý¸é ´ÙÀ½¿¡ ¾Ë¾Æº¼ dynamic_cast ¿¬»êÀÚ´Â RTTI Á¤º¸¸¦ »ç¿ëÇÏ¿© À§ÇèÇÑ º¯È¯À» ¸·¾Æ ÁØ´Ù.