Ŭ·¡½º°¡ »ó¼ÓµÉ ¶§ ±â¹Ý Ŭ·¡½ºÀÇ ¸â¹ö¿¡ ´ëÇÑ ¾×¼¼½º ¼Ó¼ºÀÌ ÆÄ»ý Ŭ·¡½º¿¡°Ô ¾î¶»°Ô »ó¼ÓµÇ´ÂÁö ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ Å×½ºÆ®ÇØ º¸ÀÚ. ÀÌ ¿¹Á¦¸¦ ÄÄÆÄÀÏÇÏ¸é µÎ °³ÀÇ ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
¿¹ Á¦ : 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 ¸â¹ö°¡ ¹Ù·Î ÀÌ ¼Ó¼ºÀ¸·Î ¼±¾ðµÇ¾î Àִµ¥ ÀÌ´Â »ó¼ÓÀ» °í·ÁÇ߱⠶§¹®ÀÌ´Ù.