27-4-³ª.»ó¼ö ¸â¹ö ÇÔ¼ö

»ó¼ö ¸â¹ö ÇÔ¼ö´Â ¸â¹ö°ªÀ» º¯°æÇÒ ¼ö ¾ø´Â ÇÔ¼öÀÌ´Ù. ¸â¹ö°ªÀ» ´Ü¼øÈ÷ Àб⸸ ÇÑ´Ù¸é ÀÌ ÇÔ¼ö´Â °´Ã¼ÀÇ »óŸ¦ ¹Ù²ÙÁö ¾Ê´Â´Ù´Â Àǹ̷Π»ó¼ö ¸â¹ö ÇÔ¼ö·Î ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ŭ·¡½º ¼±¾ð¹®ÀÇ ÇÔ¼ö ¿øÇü µÚÂÊ¿¡ const Å°¿öµå¸¦ ºÙÀÌ¸é »ó¼ö ¸â¹ö ÇÔ¼ö°¡ µÈ´Ù. ÇÔ¼öÀÇ ¾ÕÂÊ¿¡¼­´Â ¸®ÅÏ°ªÀÇ Å¸ÀÔÀ» ÁöÁ¤Çϱ⠶§¹®¿¡ const¸¦ ÇÔ¼ö µÚ¿¡ ºÙÀÌ´Â Á» º°³­ Ç¥±â¹ýÀ» »ç¿ëÇÑ´Ù.

 

class Some

{

private:

     int Value;

 

public:

     int SetValue(int aValue);        // ºñ»ó¼ö ¸â¹ö ÇÔ¼ö

     int GetValue() const;             // »ó¼ö ¸â¹ö ÇÔ¼ö

};

 

Á¤¼öÇüÀÇ Value º¯¼ö°¡ ºñ°ø°³ ¿µ¿ª¿¡ ¼±¾ðµÇ¾î ÀÖ°í ÀÌ ¸â¹ö°ªÀ» ÀÐ°í ¾²´Â Get/Set ¾×¼¼½º ÇÔ¼öµéÀº °ø°³ ¿µ¿ª¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. Value¸¦ ¿ÜºÎ¿¡¼­ º¯°æÇÏ°í ½Í´Ù¸é SetValue ÇÔ¼ö¸¦ È£ÃâÇÏ°í Value¸¦ ÀÐ°í ½ÍÀ» ¶§´Â GetValue ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. À̶§ GetValue´Â °´Ã¼ÀÇ ¾î¶°ÇÑ ¸â¹ö°ªµµ º¯°æÇÏÁö ¾ÊÀ¸¹Ç·Î »ó¼ö ¸â¹ö ÇÔ¼öÀ̸ç ÀÌ ÇÔ¼ö ¿øÇü µÚ¿¡ const¸¦ ºÙ¿© GetValue´Â °ªÀ» Àб⸸ ÇÑ´Ù´Â °ÍÀ» ÄÄÆÄÀÏ·¯¿¡°Ô È®½ÇÇÏ°Ô ¾Ë·Á ÁØ´Ù.

»ó¼ö·Î ¼±¾ðµÈ °´Ã¼¿¡ ´ëÇؼ­´Â »ó¼ö ¸â¹ö ÇÔ¼ö¸¸ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ºñ»ó¼ö ¸â¹ö ÇÔ¼ö´Â È£ÃâÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇÏ¸é »ó¼ö °´Ã¼´Â Àбâ Àü¿ëÀ̹ǷΠ¾î¶² ¸â¹öÀÇ °ªµµ º¯°æµÇ¾î¼­´Â ¾ÈµÇ±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : ConstFunc

#include <Turboc.h>

 

class Position

{

private:

     int x,y;

     char ch;

 

public:

     Position(int ax, int ay, char ach) { x=ax;y=ay;ch=ach; }

     void OutPosition() const { gotoxy(x, y);putch(ch); }

     void MoveTo(int ax, int ay) { x=ax; y=ay; }

};

 

void main()

{

     Position Here(1,2,'A');

     Here.MoveTo(20,5);

     Here.OutPosition();

 

     const Position There(3,4,'B');

     There.MoveTo(40,10);           // ¿¡·¯ ¹ß»ý

     There.OutPosition();

}

 

¹®ÀÚ¸¦ Ãâ·ÂÇÏ´Â OutPositionÇÔ¼ö´Â °ªÀ» Àб⸸ ÇϹǷΠconst·Î ¼±¾ðµÇ¾î ÀÖ°í MoveToÇÔ¼ö´Â À§Ä¡¸¦ ¿Å±â±â À§ÇØ x, y ¸â¹öÀÇ °ªÀ» º¯°æÇϹǷΠconst°¡ ¾Æ´Ï´Ù. ¸¸¾à MoveTo¸¦ const·Î ÁöÁ¤ÇÏ¸é »ó¼ö¸¦ º¯°æÇÒ ¼ö ¾ø´Ù´Â ¿¡·¯·Î 󸮵ȴÙ. °´Ã¼ÀÇ °ªÀ» Á¶±ÝÀÌ¶óµµ º¯°æÇÏ´Â ÇÔ¼ö´Â »ó¼ö ¸â¹ö ÇÔ¼ö·Î ÁöÁ¤ÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. const·Î ¼±¾ðµÈ OutPosition¿¡ x++µûÀ§ÀÇ Äڵ带 ÀÛ¼ºÇÏ¸é »ó¼ö ¸â¹ö ÇÔ¼ö°¡ °´Ã¼ÀÇ »óŸ¦ º¯°æÇÏ·Á°í ÇßÀ¸¹Ç·Î ¿ª½Ã ¿¡·¯·Î ó¸®µÉ °ÍÀÌ´Ù. ´Ü, »ó¼ö ¸â¹ö ÇÔ¼ö¶óµµ Á¤Àû ¸â¹ö º¯¼öÀÇ °ªÀº º¯°æÇÒ ¼ö Àִµ¥ Á¤Àû ¸â¹ö´Â °´Ã¼ÀÇ ¼Ò¼ÓÀÌ ¾Æ´Ï¸ç °´Ã¼ÀÇ »óŸ¦ ³ªÅ¸³»Áöµµ ¾Ê±â ¶§¹®ÀÌ´Ù.

mainÀÇ Å×½ºÆ® Äڵ带 º¸ÀÚ. Here´Â ºñ»ó¼ö °´Ã¼·Î ¼±¾ðµÇ¾ú¹Ç·Î OutPositionÀ¸·Î ¹®ÀÚ¸¦ Ãâ·ÂÇÔÀº ¹°·Ð MoveTo·Î À§Ä¡¸¦ ¿Å±æ ¼öµµ ÀÖ´Ù. ±×·¯³ª There´Â »ó¼ö °´Ã¼·Î ¼±¾ðµÇ¾ú¹Ç·Î »ó¼ö ¸â¹ö ÇÔ¼öÀÎ OutPosition¸¸ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç MoveTo È£Ãâ¹®Àº ¿¡·¯·Î 󸮵ȴÙ. ÀÌ ¹®ÀåÀÌ ¿¡·¯·Î 󸮵Ǵ ÀÌÀ¯´Â ´ÙÀ½ ¹®ÀåÀÌ ¿¡·¯·Î 󸮵Ǵ ÀÌÀ¯¿Í µ¿ÀÏÇÏ´Ù.

 

const int i=5;

i=8;                   // ¿¡·¯

 

»ó¼ö¿¡ ¾î¶² °ªÀ» ´ëÀÔÇÏ¿© º¯°æÇÒ ¼ö ¾ø´Â °Í°ú ¸¶Âù°¡Áö·Î »ó¼ö °´Ã¼ÀÇ »óŸ¦ º¯°æÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °Íµµ ºÒ°¡´ÉÇÏ´Ù. ºñ»ó¼ö ¸â¹ö ÇÔ¼ö°¡ ¹Þ´Â °´Ã¼ Æ÷ÀÎÅÍ this´Â Position * const ÇüÀ̸ç this ÀÚü´Â »ó¼öÀÌÁö¸¸ this°¡ °¡¸®Å°´Â ´ë»óÀº »ó¼ö°¡ ¾Æ´Ï´Ù. ¹Ý¸é »ó¼ö ¸â¹ö ÇÔ¼ö°¡ ¹Þ´Â °´Ã¼ Æ÷ÀÎÅÍ this´Â const Position * const ÇüÀ̸ç thisµµ »ó¼öÀÌ°í this°¡ °¡¸®Å°´Â ´ë»óµµ »ó¼öÀÌ´Ù. °á±¹ »ó¼ö ¸â¹ö ÇÔ¼öÀÇ Á¦ÀÏ ³¡¿¡ ºÙ´Â const´Â ÀÌ ÇÔ¼ö·Î Àü´ÞµÇ´Â ¼û°ÜÁø Àμö thisÀÇ »ó¼ö¼ºÀ» ÁöÁ¤ÇÑ´Ù.

ÄÄÆÄÀÏ·¯´Â ¸â¹ö ÇÔ¼öÀÇ Äڵ带 Àо°í ¸â¹ö°ªÀ» º¯°æÇÏ´ÂÁö ¾Æ´ÑÁö¸¦ Á¤È®ÇÏ°Ô ÆÇ´ÜÇÒ ¼ö ¾ø´Ù. ¸â¹öÀÇ °ªÀ» º¯°æÇÏ´Â ¹æ¹ý¿¡´Â Á÷Á¢ÀûÀÎ ´ëÀÔ¸¸ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅ͸¦ ÅëÇÑ °£Á¢ º¯°æ, ÇÔ¼ö È£ÃâÀ» ÅëÇÑ º¯°æ µî ¿©·¯ °¡Áö º¯Ä¢ÀûÀÎ ¹æ¹ýµéÀÌ ¸¹±â ¶§¹®¿¡ ÇÔ¼öÀÇ ³»¿ë¸¸À¸·Î »ó¼ö¼ºÀ» Á¤È®ÇÏ°Ô ÆÇ´ÜÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ±×·¡¼­ »ó¼ö ¸â¹ö ÇÔ¼öÀÎÁö ¾Æ´ÑÁö´Â °³¹ßÀÚ°¡ ÆÇ´ÜÇؼ­ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ¸¸¾à OutPositionÀÇ ¿øÇü¿¡ const¸¦ »© ¹ö¸®¸é There.OutPosition() È£ÃâÁ¶Â÷µµ ¿¡·¯·Î 󸮵ȴÙ. ¿Ö³ÄÇϸé ÄÄÆÄÀÏ·¯´Â OutPositionÇÔ¼ö°¡ ¸â¹ö°ªÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®ÀÌ´Ù.

¾î¶² ¸â¹ö ÇÔ¼ö°¡ °ªÀ» Àб⸸ ÇÏ°í ¹Ù²ÙÁö´Â ¾Ê´Â´Ù¸é const¸¦ ºÙÀÌ´Â °ÍÀÌ ¿øÄ¢À̸ç ÀÌ ¿øÄ¢´ë·Î Ŭ·¡½º¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÌ Ã¥ÀÇ ¿¹Á¦µéÀº ¿¹Á¦·Î¼­ÀÇ °£·«ÇÔÀ» À§ÇØ Á¾Á¾ ÀÌ ¿øÄ¢À» ¹«½ÃÇÏ°í Àִµ¥ Àý´ë·Î º»¹ÞÁö ¸»¾Æ¾ß ÇÑ´Ù. ¿¹Á¦´Â ´Ù·ç°í ÀÖ´Â ÁÖÁ¦ÀÇ ÇÙ½ÉÀ» º¸¿©¾ß Çϱ⠶§¹®¿¡ ºÒ°¡ÇÇÇÏ°Ô ¸ðµç ¿øÄ¢À» ÁؼöÇϱ⠾î·Æ´Ù. ¸¸¾à ¿øÄ¢À» ¾î±â¸é »ó¼ö °´Ã¼¿¡ ´ëÇؼ­ ºñ»ó¼ö ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø°Ô µÈ´Ù. ´ÙÀ½°ú °°Àº ÇÔ¼öÀÇ °æ¿ì¸¦ º¸ÀÚ.

 

void func(const Position *Pos);

 

ÀÌ ÇÔ¼ö·Î Àü´ÞµÇ´Â Pos´Â »ó¼ö Áö½Ã Æ÷ÀÎÅÍÀ̹ǷΠ*Pos´Â func ÇÔ¼ö ¾È¿¡¼­ »ó¼ö °´Ã¼ÀÌ´Ù. µû¶ó¼­ Pos °´Ã¼¿¡ ´ëÇؼ­´Â »ó¼ö ¸â¹ö ÇÔ¼ö¸¸ È£ÃâÇÒ ¼ö ÀÖ´Ù. MoveTo·Î À§Ä¡¸¦ ¿Å±æ ¼ö ¾øÀ¸¸ç OutPosition ÀÌ »ó¼ö ¸â¹ö ÇÔ¼ö·Î ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é ¹®ÀÚ¸¦ Ãâ·ÂÇÏ´Â °Íµµ ºÒ°¡´ÉÇØÁø´Ù. ÀÌ·± °æ¿ì¿¡µµ Àß µ¿ÀÛÇÏ·Á¸é ¿øÄ¢´ë·Î ¸â¹ö°ªÀ» ¹Ù²ÙÁö ¾Ê´Â ÇÔ¼ö´Â »ó¼ö ¸â¹ö ÇÔ¼ö·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù.

ÇÔ¼öÀÇ »ó¼ö¼ºÀº ÇÔ¼ö ¿øÇüÀÇ ÀϺηΠÆ÷ÇԵȴÙ. ±×·¡¼­ À̸§°ú Àμö ¸ñ·ÏÀÌ °°´õ¶óµµ const°¡ ÀÖ´Â ÇÔ¼ö¿Í ±×·¸Áö ¾ÊÀº ÇÔ¼ö¸¦ ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù. Áï, ´ÙÀ½ µÎ ÇÔ¼ö´Â À̸§°ú ÃëÇÏ´Â Àμö°¡ °°´õ¶óµµ ´Ù¸¥ ÇÔ¼ö·Î ÀνĵȴÙ.

 

void func(int a, double b, char c) const;

void func(int a, double b, char c);

 

»ç½Ç ÀÌ´Â Áö±ØÈ÷ ´ç¿¬ÇÑ ±ÔÄ¢Àε¥ ÀμöÀÇ »ó¼ö¼ºÀÌ ¿À¹ö·Îµù Á¶°ÇÀÌ µÇ¹Ç·Î constÀÎ this¿Í ±×·¸Áö ¾ÊÀº this¸¦ ¹Þ´Â ÇÔ¼öµµ ´ç¿¬È÷ Áߺ¹ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ µÎ ÇÔ¼ö°¡ Áߺ¹ Á¤ÀÇ °¡´ÉÇÑ °Í°ú °°Àº ÀÌÀ¯¶ó°í ÀÌÇØÇÏ¸é µÈ´Ù.

 

void func(const char *p);

void func(char *p);

 

ÄÄÆÄÀÏ·¯´Â »ó¼ö °´Ã¼¿¡ ´ëÇؼ­´Â À§ÂÊÀÇ »ó¼ö ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÌ°í ±×·¸Áö ¾ÊÀº °æ¿ì´Â ¾Æ·¡ÂÊÀÇ ºñ»ó¼ö ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. °´Ã¼°¡ »ó¼öÀÏ ¶§¿Í ±×·¸Áö ¾ÊÀ» ¶§ÀÇ Ã³¸®¸¦ ´Ù¸£°Ô ÇÏ°í ½Í´Ù¸é µÎ Å¸ÀÔÀÇ ÇÔ¼ö¸¦ µû·Î Á¦°øÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. const¿Í ºñ½ÁÇÑ ÁöÁ¤ÀÚÀÎ volatile µµ ¸¶Âù°¡Áö·Î ÇÔ¼ö ¿øÇüÀÇ ÀϺÎÀÌ´Ù.