34-2-ÀÚ.using ¼±¾ð

using ¼±¾ðÀº ´Ù¸¥ ³×ÀÓ ½ºÆäÀ̽ºÀÇ ¸íĪÀ» ÀÌ ¼±¾ðÀÌ ÀÖ´Â °÷À¸·Î °¡Á® ¿À´Â ¹®ÀåÀε¥ Ŭ·¡½º °èÃþ »çÀÌ¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ŭ·¡½º ÀÚüµµ ÀÏÁ¾ÀÇ ±¹ÁöÀûÀÎ ³×ÀÓ ½ºÆäÀ̽º·Î º¼ ¼ö ÀÖÀ¸¹Ç·Î using ¼±¾ðÀ¸·Î ¿øÇÏ´Â ¸íĪÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù. Ŭ·¡½º¿¡¼­ using ¼±¾ðÀ» »ç¿ëÇÏ¸é ±â¹Ý Ŭ·¡½º ¸â¹öÀÇ ¾×¼¼½º ¼Ó¼ºÀ» ¿øÇϴ´ë·Î º¯°æÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : classusing1

#include <Turboc.h>

 

class B

{

private:

     void p() { puts("Base private function"); };

protected:

     void f() { puts("Base protected function"); }

public:

     void u() { puts("Base public function"); }

};

 

class D : public B

{

protected:

//  using B::u;

public:

//  using B::f;

     void f() { B::f(); }

};

 

void main()

{

     D d;

     d.f();

     d.u();

}

 

±â¹Ý Ŭ·¡½º B¿¡ ¾×¼¼½º ¼Ó¼ºº°·Î ¼¼ °³ÀÇ ¸â¹ö ÇÔ¼ö°¡ ¼±¾ðµÇ¾î ÀÖ´Ù. D´Â ÀÌ Å¬·¡½º¸¦ public »ó¼Ó¹Þ¾ÒÀ¸¹Ç·Î f ÇÔ¼ö°¡ protected ¼Ó¼ºÀ¸·Î »ó¼ÓµÇ¸ç u´Â public ¼Ó¼ºÀ¸·Î »ó¼ÓµÈ´Ù. u´Â ¿ÜºÎ¿¡¼­µµ È£Ãâ°¡´ÉÇÏÁö¸¸ protected ¼Ó¼ºÀ» °¡Áö´Â f´Â D¿¡¼­´Â È£ÃâÇÒ ¼ö ÀÖÁö¸¸ ¿ÜºÎ¿¡¼­´Â È£ÃâÇÒ ¼ö ¾ø´Ù. ¸¸¾à f¸¦ ¿ÜºÎ¿¡¼­ È£ÃâÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í ½Í´Ù¸é µÎ °¡Áö ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¿ì¼± ÀÌ ÇÔ¼ö¸¦ public ¿µ¿ª¿¡ °°Àº À̸§À¸·Î ÀçÁ¤ÀÇÇÏ´Â ¹æ¹ýÀ» ¾µ ¼ö Àִµ¥ ÀÌ·¸°Ô µÇ¸é B::f´Â °¡·ÁÁø´Ù. ÀçÁ¤ÀÇµÈ f°¡ B::f¸¦ ´ë¸® È£ÃâÇÏ¸é ¿ÜºÎ¿¡¼­µµ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. protected ¾×¼¼½º ¼Ó¼ºÀ» °¡Áö´Â ¸â¹ö ÇÔ¼ö°¡ ÀçÁ¤ÀÇ¿¡ ÀÇÇØ publicÀ¸·Î À̵¿ÇÑ °ÍÀÌ´Ù. À§ ¿¹Á¦¸¦ ½ÇÇàÇϸé main¿¡¼­ d.f¸¦ È£ÃâÇÏ´Â °ÍÀÌ Çã°¡µÈ´Ù. DÀÇ f ÇÔ¼ö¸¦ ÁÖ¼® ó¸®ÇÏ¸é ¹°·Ð È£ÃâÇÒ ¼ö ¾ø´Ù.

µÎ ¹ø° ¹æ¹ýÀ¸·Î using ¼±¾ðÀ» »ç¿ëÇÏ¿© protected ¿µ¿ª¿¡ ÀÖ´Â f ÇÔ¼ö¸¦ public ¿µ¿ªÀ¸·Î ¸íĪÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é »ó¼Ó¹ÞÀº f°¡ public ¿µ¿ª¿¡ ¼±¾ðµÈ °Í°ú °°¾ÆÁ® ¿ÜºÎ¿¡¼­µµ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀçÁ¤ÀÇµÈ f ÇÔ¼ö¸¦ ÁÖ¼® ó¸®ÇÏ°í using ¼±¾ð¸¸ ³²°Ü µÎ¾îµµ ÀÌ ¿¹Á¦´Â Àß ½ÇÇàµÈ´Ù. µÑ ´Ù ÁÖ¼® ó¸®ÇÏ¸é ¿ÜºÎ¿¡¼­ f¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù. using ¼±¾ðÀº public ¿µ¿ª¿¡ ÀÖ´Â ¸íĪÀ» protected·Î ¼û±æ ¼öµµ ÀÖ´Ù. B::u´Â ±×´ë·Î µÎ¸é publicÀÌÁö¸¸ protected³ª private·Î ¿Å°Ü ¹ö¸®¸é ¿ÜºÎ¿¡¼­ È£ÃâÇÒ ¼ö ¾ø´Ù.

using ¼±¾ðÀº Á¢±Ù °¡´ÉÇÑ ¸â¹öÀÇ ¾×¼¼½º ¼Ó¼ºÀ» º¯°æÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¾îµð±îÁö³ª Á¢±Ù °¡´ÉÇÑ ¸â¹ö¿¡ ´ëÇؼ­¸¸ ÀÌ ÁöÁ¤À» »ç¿ëÇÒ ¼ö ÀÖÀ» »ÓÀε¥ ¿¹Á¦¿¡¼­ BÀÇ private ¿µ¿ª¿¡ ÀÖ´Â p ÇÔ¼ö¸¦ public ¿µ¿ª¿¡ µÎ°í ½Í´Ù°í Çؼ­ using B::p; ¼±¾ðÀ» »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. Àڽŵµ Á¢±ÙÇÏÁö ¸øÇÏ´Â ¸â¹ö¿¡ ´ëÇÑ ¾×¼¼½º ÁöÁ¤À» º¯°æÇÑ´Ù´Â °Í ÀÚü°¡ ¸»ÀÌ µÇÁö ¾Ê´Â °ÍÀÌ´Ù. ¿À·ÎÁö ±â¹Ý Ŭ·¡½ºÀÇ Çã°¡µÈ ¸â¹ö(protected, public)¸¸ using ¼±¾ðÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½ ¿¹Á¦´Â private »ó¼Ó½Ã ¿ÜºÎ·Î °ø°³µÇÁö ¾Ê´Â ÀÎÅÍÆäÀ̽º¸¦ °ø°³Çϱâ À§ÇØ using ¼±¾ðÀ» »ç¿ëÇÑ´Ù.

 

¿¹ Á¦ : classusing2

#include <Turboc.h>

 

class B

{

protected:

     void f() { puts("Base protected function"); }

public:

     int m;

};

 

class D : private B

{

protected:

     using B::m;

public:

     using B::f;

};

 

class G : public D

{

public:

     void gf() {

          m=1234;

     }

};

 

void main()

{

     D d;

     d.f();

//  d.m=1234;

}

 

D´Â B¸¦ private »ó¼Ó¹Þ¾ÒÀ¸¹Ç·Î BÀÇ f, m ¸â¹ö´Â ¸ðµÎ private°¡ µÉ °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼­´Â D ¿ÜºÎ³ª ÆÄ»ý Ŭ·¡½º¿¡¼­ »ó¼Ó¹ÞÀº ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö ¾ø´Â °ÍÀÌ Á¤»óÀÌ´Ù. ÇÏÁö¸¸ D°¡ using ¼±¾ðÀ¸·Î ÀÌ ¸â¹öµéÀÇ ¾×¼¼½º ¼Ó¼ºÀ» º¯°æÇÏ¿´À¸¹Ç·Î º¯°æµÈ ¼Ó¼º´ë·Î ¾×¼¼½º°¡ Çã°¡µÈ´Ù. fÀÇ °æ¿ì public ¿µ¿ª¿¡ using ¼±¾ðÇßÀ¸¹Ç·Î Ŭ·¡½º ¿ÜºÎÀÎ main¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. mÀÇ °æ¿ì protected ¿µ¿ª¿¡ using ¼±¾ðÇßÀ¸¹Ç·Î ÀÌÂ÷ ÆÄ»ý Ŭ·¡½ºÀÎ G°¡ ÀÌ ¸â¹ö¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ main¿¡´Â mÀ» ÀÐÀ» ¼ö ¾ø´Ù.