29-1-´Ù.»ó¼Ó°ú Á¤º¸ ÀºÆó

Ŭ·¡½º°¡ »ó¼ÓµÉ ¶§ ±â¹Ý Ŭ·¡½ºÀÇ ¸â¹ö¿¡ ´ëÇÑ ¾×¼¼½º ¼Ó¼ºÀÌ ÆÄ»ý Ŭ·¡½º¿¡°Ô ¾î¶»°Ô »ó¼ÓµÇ´ÂÁö ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ Å×½ºÆ®ÇØ º¸ÀÚ. ÀÌ ¿¹Á¦¸¦ ÄÄÆÄÀÏÇÏ¸é µÎ °³ÀÇ ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.

 

¿¹ Á¦ : InheritAccess

#include <Turboc.h>

 

class B

{

private:

     int b_pri;

     void b_fpri() { puts("±â¹Ý Ŭ·¡½ºÀÇ private ÇÔ¼ö"); }

protected:

     int b_pro;

     void b_fpro() { puts("±â¹Ý Ŭ·¡½ºÀÇ protected ÇÔ¼ö"); }

public:

     int b_pub;

     void b_fpub() { puts("±â¹Ý Ŭ·¡½ºÀÇ public ÇÔ¼ö"); }

};

 

class D : public B

{

private:

     int d_pri;

     void d_fpri() { puts("ÆÄ»ý Ŭ·¡½ºÀÇ private ÇÔ¼ö"); }

public:

     void d_fpub() {

          d_pri=0;        // ÀÚ½ÅÀÇ ¸ðµç ¸â¹ö ¾×¼¼½º °¡´É

          d_fpri();

 

          b_pri=1;        // ¿¡·¯ : ºÎ¸ðÀÇ private ¸â¹ö´Â ¾×¼¼½ºÇÒ ¼ö ¾øÀ½

          b_fpri();

         

          b_pro=2;       // ºÎ¸ðÀÇ protected ¸â¹ö´Â ¾×¼¼½º °¡´É

          b_fpro();

 

          b_pub=3;       // ºÎ¸ðÀÇ public ¸â¹ö´Â ¾×¼¼½º °¡´É

          b_fpub();

     }

};

 

 

void main()

{

     D d;

 

     d.d_fpub();             // ÀÚ½ÅÀÇ ¸â¹ö ÇÔ¼ö È£Ãâ

     d.b_fpub();             // ºÎ¸ðÀÇ public ¸â¹ö ÇÔ¼ö È£Ãâ

}

 

±â¹Ý Ŭ·¡½ºÀÎ B¿¡´Â private, protected, public °¢°¢ÀÇ ¾×¼¼½º ¼Ó¼ºÀ¸·Î ¸â¹ö º¯¼ö¿Í ¸â¹ö ÇÔ¼ö¸¦ ¸ðµÎ Á¤ÀÇÇØ µÎ¾ú´Ù. Å×½ºÆ® ¿¹Á¦À̹ǷΠ¸â¹ö À̸§Àº ¼Ò¼Ó°ú ¾×¼¼½º ÁöÁ¤À» Æ÷ÇÔÇÏ¿© ½±°Ô ±¸ºÐÇÒ ¼ö ÀÖ´Â Çü½ÄÀ¸·Î ÀÛ¼ºÇß´Ù. ¿¹¸¦ µé¾î b_pub´Â ±â¹Ý Ŭ·¡½ºÀÇ ÆÛºí¸¯ ¸â¹ö º¯¼öÀÌ°í b_fpri´Â ±â¹Ý Ŭ·¡½ºÀÇ ÇÁ¶óÀ̺ñÆ® ÇÔ¼öÀÌ´Ù. B¿¡¼­ D¸¦ ÆÄ»ýÇßÀ» ¶§ ÆÄ»ý Ŭ·¡½ºÀÎ D¿¡¼­ ±â¹Ý Ŭ·¡½ºÀÇ °¢ ¸â¹öµéÀ» ¾×¼¼½ºÇÏ¸é ¾î¶»°Ô µÉ±î?

±â¹Ý Ŭ·¡½ºÀÇ public ¸â¹ö´Â °ø°³µÇ¾î ÀÖÀ¸¹Ç·Î ÆÄ»ý Ŭ·¡½º»Ó¸¸ ¾Æ´Ï¶ó ÀÌ Å¬·¡½ºÀÇ ¿ÜºÎ¿¡¼­µµ ¾ó¸¶µçÁö ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. DÀÇ ¸â¹ö ÇÔ¼ö d_fpub¿¡¼­ b_pub¿Í b_fpub´Â ¾ó¸¶µçÁö ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¸ç main ÇÔ¼ö¿¡¼­µµ ÀÌ ¸â¹öµéÀº ÂüÁ¶ °¡´ÉÇÏ´Ù. ±×·¯³ª ±â¹Ý Ŭ·¡½ºÀÇ private ¸â¹ö´Â ¼û°ÜÁ® ÀÖÀ¸¹Ç·Î ¿ÜºÎ¿¡¼­¿Í ¸¶Âù°¡Áö·Î ÆÄ»ý Ŭ·¡½º¿¡¼­ Á÷Á¢ ¾×¼¼½ºÇÒ ¼ö ¾ø´Ù. ¾Æ¹«¸® ÀÚ½ÄÀ̶ó ÇÏ´õ¶óµµ ºÎ¸ðÀÇ ¼û°ÜÁø ¸â¹ö¸¦ °Çµå¸®´Â °ÍÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ D::d_fpub¿¡¼­ B::b_pri¸¦ ÂüÁ¶ÇѴٰųª B::b_fpri ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹®ÀåÀº ¿¡·¯·Î 󸮵ȴÙ. ÀÌ µÎ ÁÙÀ» ÁÖ¼®À¸·Î ó¸®ÇØ¾ß ¿¹Á¦°¡ ÄÄÆÄÀ쵃 °ÍÀÌ´Ù.

»ó¼Ó °ü°è¿¡ À־µµ ÆÄ»ý Ŭ·¡½º´Â ±â¹Ý Ŭ·¡½ºÀÇ ¿ÜºÎ·Î °£ÁÖµÇ¾î ¾ö°ÝÇÑ ¾×¼¼½º Á¦ÇÑÀÌ Àû¿ëµÈ´Ù. ±×·±µ¥ ÆÄ»ý Ŭ·¡½º´Â ±â¹Ý Ŭ·¡½º¿Í ¾î´À Á¤µµ °ü·ÃÀÌ Àֱ⠶§¹®¿¡ ¶§·Î´Â ÆÄ»ý Ŭ·¡½º¿¡°Ô ¼û°ÜÁø ¸â¹ö¿¡ ´ëÇÑ ¾×¼¼½º¸¦ Çã¿ëÇØ¾ß ÇÒ °æ¿ìµµ ÀÖ´Ù. Ŭ·¡½º ¿ÜºÎ¿Í´Â ´Þ¸® ½ßÆÇ ³²Àº ¾Æ´Ñ °ÍÀÌ´Ù. ÀÌ·² ¶§ »ç¿ëÇÏ´Â ¾×¼¼½º ÁöÁ¤ÀÌ ¹Ù·Î protectedÀ̸ç public°ú privateÀÇ Áß°£ Á¤µµ¿¡ ÇØ´çÇÑ´Ù. protected·Î ÁöÁ¤µÈ ¸â¹ö´Â Ŭ·¡½º ¿ÜºÎ¿¡¼­´Â ÂüÁ¶ÇÒ ¼ö ¾øÁö¸¸ ÆÄ»ý Ŭ·¡½º¿¡¼­´Â ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ¾×¼¼½º ¼Ó¼ºÀÌ´Ù.

À§ ¿¹Á¦ÀÇ D::d_fpub¿¡¼­ ºÎ¸ðÀÇ protected ¸â¹öÀÎ b_pro, b_fpro´Â ¾×¼¼½º °¡´ÉÇÏ´Ù. ±×·¯³ª main¿¡¼­ ÀÌ °ªÀ» ÂüÁ¶ÇÏ¸é ¿¡·¯´Ù. main¿¡ d.b_pro=1234; ´ëÀÔ¹®À» ÀÛ¼ºÇØ º¸¸é ¿¡·¯·Î 󸮵Ǵµ¥ mainÀº ¸í¹éÇÑ Å¬·¡½º ¿ÜºÎÀ̸ç ÆÄ»ý Ŭ·¡½ºµµ ¾Æ´Ï¹Ç·Î ÀÌ ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö ¾ø´Ù. ¾×¼¼½º ÁöÁ¤ÀÚÀÇ ±â´ÉÀ» µµÇ¥·Î Á¤¸®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.

 

¾×¼¼½º ÁöÁ¤ÀÚ

Ŭ·¡½º ¿ÜºÎ

ÆÄ»ý Ŭ·¡½º

¼³¸í

private

¾×¼¼½º ±ÝÁö

¾×¼¼½º ±ÝÁö

¹«Á¶°Ç ±ÝÁö

protected

¾×¼¼½º ±ÝÁö

¾×¼¼½º Çã¿ë

ÆÄ»ý Ŭ·¡½º¸¸ Çã¿ë

public

¾×¼¼½º Çã¿ë

¾×¼¼½º Çã¿ë

¹«Á¶°Ç Çã¿ë

 

protected ¾×¼¼½º ¼Ó¼ºÀº »ó¼Ó °ü°è¿¡ ÀÖÁö ¾ÊÀº Ŭ·¡½º³ª ¿ÜºÎ¿¡ ´ëÇØ private¿Í °°À¸¸ç ÆÄ»ý Ŭ·¡½º¿¡ ´ëÇؼ­´Â public°ú °°´Ù. ¿ÜºÎ¿¡ ´ëÇؼ­´Â ¼û°Ü¾ß ÇÏÁö¸¸ ÆÄ»ý Ŭ·¡½º¿¡¼­ ¾×¼¼½ºÇÒ ÇÊ¿ä°¡ ÀÖ´Â ¸â¹ö´Â protected ¾×¼¼½º ¼Ó¼ºÀ» ÁöÁ¤ÇÑ´Ù. InheritPoint ¿¹Á¦¿¡¼­ CoordÀÇ x, y ¸â¹ö°¡ protected ¾×¼¼½º ¼Ó¼ºÀ¸·Î ÁöÁ¤µÇ¾î Àִµ¥ ¿ÜºÎ¿¡¼­ ÀÌ °ªÀ» ÇԺηΠ°Çµå¸®Áö ¸øÇϵµ·Ï º¸È£ÇØ¾ß ÇÏÁö¸¸ ÆÄ»ý Ŭ·¡½ºÀÎ PointÀÇ Show, Hide¿¡¼­´Â ÀÌ ¸â¹öµéÀ» ÀÐÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à CoordÀÇ x, y¸¦ private·Î ¼±¾ðÇÏ¿© ÆÄ»ý Ŭ·¡½º¿¡ ´ëÇؼ­µµ ¼û°Ü ¹ö¸®¸é ÀÌ ¿¹Á¦´Â ÄÄÆÄÀϵÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

ÆÄ»ý Ŭ·¡½º´Â ±â¹Ý Ŭ·¡½º¿Í ¾ÆÁÖ ¹ÐÁ¢ÇÑ °ü°è¿¡ ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ±â¹Ý Ŭ·¡½ºÀÇ private ¸â¹ö¸¦ ÂüÁ¶ÇÏÁö ¸øÇÑ´Ù´Â °ÍÀº ¼±¶æ ÀÌÇØÇϱ⠾î·Á¿ï ¼öµµ ÀÖ´Ù. ¾²Áöµµ ¸øÇÒ ¸â¹ö¸¦ ¿Ö »ó¼Ó¹Þ¾Æ¾ß ÇÏ´ÂÁö Á÷°üÀûÀ¸·Î ÀÌÇصÇÁö ¾Ê´Â´Ù. ±×·¯³ª ºÎ¸ð Ŭ·¡½º°¡ ½º½º·ÎÀÇ Á¤º¸ ÀºÆó¸¦ À§ÇØ ÀڽĿ¡°ÔÁ¶Â÷ ¸â¹ö¸¦ ¼û°Ü¾ß ÇÒ ÇÊ¿ä´Â ºÐ¸íÈ÷ ÀÖÀ¸¸ç ÀÌ·¸°Ô ÇØ¾ß ÆÄ»ý Ŭ·¡½º°¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.

¸¸¾à ºÎ¸ðÀÇ private ¸â¹ö¸¦ ÀÚ½ÄÀÌ ÀÐÀ» ¼ö ÀÖ´Ù¸é ÀÌ´Â Á¤º¸ ÀºÆó¸¦ ¿ÏÀüÈ÷ Æ÷±âÇÏ´Â °Í°ú ¸¶Âù°¡ÁöÀÌ´Ù. ¿Ö³ÄÇϸé Ŭ·¡½º°¡ ¾Æ¹«¸® Á¤º¸¸¦ ²À²À °¨Ãç ³õ¾Æµµ ¿ÜºÎ¿¡¼­ »ó¼Ó¸¸ ¹ÞÀ¸¸é ¸ðµç ¸â¹ö¸¦ ¸¶À½´ë·Î °Çµå¸± ¼ö Àֱ⠶§¹®ÀÌ´Ù. private´Â ÀÚ½ÄÀÌ ¸ô¶óµµ µÇ´Â ºÎºÐÀÌ¸ç ¸¶¶¥È÷ ¸ô¶ó¾ß ÇÏ´Â ºÎºÐÀÌ´Ù. ÆÄ»ý Ŭ·¡½º´Â ±â¹Ý Ŭ·¡½ºÀÇ private ¸â¹ö¸¦ Á÷Á¢ ÀÐÁö´Â ¸øÇÏÁö¸¸ ±â¹Ý Ŭ·¡½ºÀÇ public, protected ÇÔ¼ö¸¦ ÅëÇØ ÀÌ ¸â¹ö¸¦ ¿©ÀüÈ÷ »ç¿ëÇÒ ¼ö´Â ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.

 

class B

{

private:

     int b;

public:              // ¶Ç´Â protected

     int Getb() { return b; }

     void Setb(int ab) { b=ab; }

};

 

class D : public B

{

public:

     void func() {

          printf("±â¹Ý Ŭ·¡½ºÀÇ b = %d\n", Getb());

     }

};

 

 D´Â BÀÇ private¸â¹öÀÎ b¸¦ Á÷Á¢ ÂüÁ¶ÇÒ ¼ö´Â ¾øÁö¸¸ »ó¼Ó¹ÞÀº Get(Set)b ¸â¹ö ÇÔ¼ö¸¦ ÅëÇØ ÀÌ ¸â¹ö°ªÀ» °£Á¢ÀûÀ¸·Î ÀÐ°í ¾µ ¼ö´Â ÀÖ´Ù. Ŭ·¡½º ¿ÜºÎ¿¡¼­ Àû¿ëµÇ´Â ±ÔÄ¢ÀÌ ÆÄ»ý Ŭ·¡½º¿¡ ´ëÇؼ­µµ ±×´ë·Î Àû¿ëµÊÀ» ¾Ë ¼ö ÀÖ´Ù. ´Ü, ¿ÜºÎ¿Í´Â ´Þ¸® ÆÄ»ý Ŭ·¡½º¸¦ À§ÇØ protected¶ó´Â ¾×¼¼½º ¼Ó¼ºÀÌ º°µµ·Î ÁغñµÇ¾î ÀÖ´Ù´Â Á¡¸¸ ´Ù¸£´Ù. ÀÏ´Ü ¼û±âµÇ Â÷ÈÄ¿¡ »ó¼ÓµÉ °¡´É¼ºÀÌ Á¶±ÝÀÌ¶óµµ ÀÖ´Ù¸é protected ¾×¼¼½º ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¾Õ Àå¿¡¼­ ¸¸µç Str Ŭ·¡½ºÀÇ buf ¸â¹ö°¡ ¹Ù·Î ÀÌ ¼Ó¼ºÀ¸·Î ¼±¾ðµÇ¾î Àִµ¥ ÀÌ´Â »ó¼ÓÀ» °í·ÁÇ߱⠶§¹®ÀÌ´Ù.