[C++]°­ÁÂ(29)<--C++ÀÇ ºÎÇ°(°¡»óÇÔ¼ö ÀçÁ¤ÀÇ)





´Ù. °¡»ó ÇÔ¼ö ÀçÁ¤ÀÇ

°¡»ó ÇÔ¼ö´Â ¿øÄ¢ÀûÀ¸·Î ÆÄ»ý Ŭ·¡½º¿¡¼­ ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù. ±×·¸´Ù°í Çؼ­
¹Ýµå½Ã ÆÄ»ý Ŭ·¡½º¿¡¼­ °¡»ó ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù´Â °ÍÀº ¾Æ´Ï¸ç ±â¹Ý Ŭ
·¡½ºÀÇ °¡»ó ÇÔ¼ö¸¦ ±×´ë·Î »ó¼Ó¹Þ°íÀÚ ÇÒ °æ¿ì´Â °¡»ó ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏÁö ¾Ê
¾Æµµ µÈ´Ù. ±×·¯³ª ÀçÁ¤ÀÇÇÒ ¶§´Â ±â¹Ý Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö¿Í ÇÔ¼öÀÇ ÇüÀÌ °°
¾Æ¾ß ÇÑ´Ù. ¿©±â¼­ ÇÔ¼öÀÇ ÇüÀ̶õ ÀμöÀÇ °³¼ö¿Í ÀμöÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸»ÇÑ´Ù.
ÆÄ»ý Ŭ·¡½º¿¡¼­ °¡»ó ÇÔ¼öÀÇ ÇüÀ» ´Ù¸£°Ô ÇÏ¿© ÀçÁ¤ÀÇÇÒ °æ¿ì´Â µÎ °¡Áö °æ¿ì
·Î ³ª´©¾îÁø´Ù.

1    ÆÄ»ý Ŭ·¡½º¿¡¼­ ÀμöÀÇ ÇüÀÌ ´Ù¸£°Ô °¡»ó ÇÔ¼ö¸¦ Á¤ÀÇÇÑ °æ¿ì
ÀÌ °æ¿ì´Â ±â¹Ý Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö°¡ ¹«½ÃµÇ°í »õ·Î¿î ÇÔ¼ö°¡ ¸¸µé¾îÁø´Ù.
ÇÔ¼öÀÇ À̸§ÀÌ °°´õ¶óµµ µ¥ÀÌÅÍ Å¸ÀÔÀÌ ´Ù¸£¸é ´Ù¸¥ ÇÔ¼ö·Î ÀνĵǹǷΠÀμö
°¡ ´Ù¸¥ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ´Ù¸¥ ÇÔ¼ö¸¦ ¾Æ¿¹ »õ·Î Á¤ÀÇÇÏ´Â °ÍÀÌ µÈ´Ù.
±â¹Ý ÇÔ¼öÀÇ °¡»ó ÇÔ¼ö´Â »ó¼ÓÀÌ µÇÁö ¾Ê´Â´Ù.
2    ¸®ÅÏ°ªÀ» ´Ù¸£°Ô ÇÑ °æ¿ì
ÀÌ °æ¿ì´Â ¿¡·¯·Î 󸮵ȴÙ. ¸®ÅÏ°ªÀÌ¾ß ¾î·µç Àμö°¡ °°À¸¹Ç·Î ±â¹Ý Ŭ·¡
½ºÀÇ °¡»ó ÇÔ¼ö¿Í °°Àº ÇÔ¼ö·Î ÀνĵǴµ¥ °°Àº ÇÔ¼ö¸¦ ´Ù¸¥ ¸®ÅÏ°ªÀ¸·Î Àç
Á¤ÀÇÇÏ´Â °ÍÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. ¸®ÅÏ°ªÀº ´ÙÇü¼ºÀÇ Àç·á°¡ µÇÁö ¸øÇÑ´Ù.

°¡»ó ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ´Â ¿©·¯ °¡Áö ¿¹¸¦ º¸ÀÚ.

#include <iostream.h>
class classA {                    // ±â¹Ý class
public:
  virtual void outdata()
    {
    cout << "I'm classA" << endl;
    }
};
class classB:public classA {  // °°Àº À̸§ °°Àº Àμö·Î °¡»ó ÇÔ¼ö
public:                        // ¸¦ ÀçÁ¤ÀÇÇÑ´Ù.
  void outdata()
    {
    cout << "I'm classB" << endl;
    }
};
class classC:public classA {  };  // °¡»ó ÇÔ¼ö Á¤ÀǸ¦ ÇÏÁö ¾ÊÀ½
class classD:public classA {      // ÀμöÀÇ ÇüÀÌ ´Ù¸¥ °¡»ó ÇÔ¼ö
Á¤ÀÇ  
public:
  void outdata(int i)
    {
    cout << "I'm classD" << endl;
    }
};
/*
class classE:public classA {  // return°ªÀÌ ´Ù¸¥ °¡»ó ÇÔ¼ö Á¤ÀÇ
public:
  int outdata()
    {
    cout << "I'm classE" << endl;
    }
};
*/
void main()
{
classA A;
classB B;
classC C;
classD D;
//classE E;
A.outdata();
B.outdata();
C.outdata();
D.outdata(1);
//D.outdata();
//E.outdata();
}

classA¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö Ŭ·¡½ºµéÀº ¸ðµÎ classA·ÎºÎÅÍ ÆÄ»ýµÈ Ŭ·¡½ºÀÌ´Ù.
classA¿¡ outdata¶ó´Â °¡»ó ÇÔ¼ö°¡ ¼±¾ðµÇ¾î ÀÖÀ¸¸ç °¢°¢ÀÇ ÆÄ»ý Ŭ·¡½º¿¡¼­´Â
°¡»ó ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ´Â ¹æ¹ýÀÌ ´Ù¾çÇÏ´Ù. ½ÇÇà °á°ú¸¦ º¸ÀÌ¸é ´ÙÀ½°ú °°´Ù.

I'm classA    // classAÀÇ °´Ã¼°¡ Ãâ·Â
I'm classB    // classBÀÇ °´Ã¼°¡ Ãâ·Â
I'm classA    // classCÀÇ °´Ã¼°¡ Ãâ·Â
I'm classD    // classDÀÇ °´Ã¼°¡ Ãâ·Â

classAÀÇ °´Ã¼°¡ È£ÃâÇÑ outdata ÇÔ¼ö´Â ´ç¿¬È÷ classAÀÇ ¸â¹ö ÇÔ¼öÀÎ classA
::outdataÀÏ °ÍÀ̸ç classBÀÇ °´Ã¼°¡ È£ÃâÇÑ outdata ÇÔ¼ö´Â classB¿¡¼­ ÀçÁ¤
ÀÇÇÑ classBÀÇ ¸â¹ö ÇÔ¼öÀÎ classB::outdataÀÌ´Ù. classC¿¡¼­´Â °¡»ó ÇÔ¼ö¸¦
º°µµ·Î Á¤ÀÇÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î classAÀÇ ¸â¹ö ÇÔ¼öÀÎ classA::outdata¸¦ ±×´ë·Î
»ó¼Ó¹Þ¾Æ »ç¿ëÇÑ´Ù.
classD¿¡¼­´Â Àμö¸¦ º°µµ·Î ÃëÇÏ´Â °¡»ó ÇÔ¼ö¸¦ Á¤ÀÇÇÏ¿´À¸¹Ç·Î °¡»ó ÇÔ¼ö¸¦
È£ÃâÇÒ ¶§µµ Àμö¸¦ ¹Ýµå½Ã ÁÖ¾î¾ß ÇÑ´Ù. ¿¹Á¦¿¡¼­ ÁÖ¼®À¸·Î ó¸®ÇØ ³õÀº ¹®±¸
µéÀº ¸ðµÎ ¿¡·¯¸¦ ÀÏÀ¸Å°´Â ¹®ÀåµéÀÌ´Ù. ¸ÕÀú classE´Â ¸®ÅÏ°ªÀÌ ´Ù¸¥ °¡»ó ÇÔ
¼ö¸¦ ´Ù½Ã Á¤ÀÇÇÏ¿´À¸¹Ç·Î ¿¡·¯¸¦ ¹ß»ý½ÃÅ°¸ç classDÀÇ °´Ã¼¿¡¼­ Àμö¾øÀÌ out
data¸¦ È£ÃâÇÏ´Â °Íµµ ¾ÈµÈ´Ù.


¶ó. »ó¼Ó°ú Æ÷ÀÎÅÍ

±â¹Ý Ŭ·¡½ºÀÇ Æ÷ÀÎÅÍ´Â ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ±×
¹Ý´ë·Î ÆÄ»ý Ŭ·¡½ºÀÇ Æ÷ÀÎÅÍ´Â ±â¹Ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®ÇÒ ¼ö ¾ø´Ù. ´ÙÀ½
¿¡ ¿¹¸¦ º¸ÀδÙ.

class A { ... };
class B:public A { ... };
A objA;
B objB;
A *ptrA;
B *ptrB;
ptrA=&objB;      // °¡´É
ptrB=&objA;      // ºÒ°¡´É

±â¹Ý Ŭ·¡½ºÀÇ Æ÷ÀÎÅÍ°¡ ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®ÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ¹®Á¦
´Â Æ÷ÀÎÅÍ º¯¼ö¸¦ »ç¿ëÇÏ¿© °´Ã¼ÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÒ °æ¿ì ¾î¶°ÇÑ ¸â¹ö¸¦ ÂüÁ¶ÇÏ
´À³Ä ÇÏ´Â ¹®Á¦ÀÌ´Ù. À̶§ Æ÷ÀÎÅÍÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» µû¸¦ °ÍÀΰ¡ ¾Æ´Ï¸é Æ÷ÀÎÅÍ
°¡ ½ÇÁ¦·Î Æ÷ÀÎÆ®ÇÏ°í ÀÖ´Â °´Ã¼¸¦ ÂüÁ¶ÇÒ °ÍÀΰ¡ÀÇ ¹®Á¦°¡ ¹ß»ýÇϴµ¥ C++¿¡
¼­´Â Æ÷ÀÎÅÍÀÇ Å¸ÀÔº¸´Ù´Â Æ÷ÀÎÆ®ÇÏ´Â °´Ã¼¿¡ µû¶ó ¸â¹ö¸¦ ÂüÁ¶Çϵµ·Ï µÇ¾î ÀÖ
´Ù. ¿¹Á¦¸¦ º¸ÀÚ.


#include <iostream.h>
class classA {
public:
  int dataA;
  classA(int a)
    {dataA=a;}
};
class classB:public classA {
public:
  int dataA;
  classB(int a):classA(a)
    { }
};
class classC:public classA {
public:
  int dataA;
  classC(int a):classA(a)
    { }
};
void main()
{
classA A(2);       // °¢ Ŭ·¡½ºÀÇ °´Ã¼¸¦ ¸¸µê
classB B(3);
classC C(4);
classA *ptr;       // classAÇüÀÇ Æ÷ÀÎÅÍ º¯¼ö ¼±¾ð
ptr=&A;            // AÀÇ ¹øÁö¸¦ ´ëÀÔ
cout << ptr->dataA << endl;  
ptr=&B;            // BÀÇ ¹øÁö¸¦ ´ëÀÔ
cout << ptr->dataA << endl;
ptr=&C;            // CÀÇ ¹øÁö¸¦ ´ëÀÔ
cout << ptr->dataA << endl;
}

classA·ÎºÎÅÍ classB¿Í classC¸¦ ÆÄ»ý½ÃÅ°°í ÀÖÀ¸¸ç °¢ Ŭ·¡½º´Â ¸ðµÎ °³º°Àû
À¸·Î dataA¶ó´Â µ¥ÀÌÅÍ ¸â¹ö¸¦ °¡Áö°í ÀÖ´Ù. main ÇÔ¼ö¿¡¼­ ¼¼°³ÀÇ °´Ã¼¸¦ ¸¸
µé°í °¢ °´Ã¼ÀÇ dataA¸¦ º°µµ·Î ´Ù¸¥ °ªÀ» ÁÖ¾î Á¤ÀÇÇÏ°í ÀÖ´Ù. classAÇüÀÇ °´
ü¸¦ Æ÷ÀÎÆ®ÇÏ´Â º¯¼ö ptrÀ» ¸¸µé¾î ÀÌ º¯¼ö¿¡ ¼¼ °´Ã¼ÀÇ ¹øÁö¸¦ Â÷·Ê·Î ´ëÀÔ
ÇÏ¿© ptrÀÌ Æ÷ÀÎÆ®ÇÏ´Â °´Ã¼ÀÇ dataA ¸â¹ö¸¦ ÂüÁ¶ÇÏ°í ÀÖ´Ù.
ptrÀº ºñ·Ï classAÇüÀÇ °´Ã¼¸¦ Æ÷ÀÎÆ®Çϵµ·Ï µÇ¾î ÀÖÁö¸¸ ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼
¸¦ Æ÷ÀÎÆ®ÇÒ °æ¿ì Æ÷ÀÎÅÍ º¯¼öÀÇ Å¸ÀÔ¿¡ »ó°ü¾øÀÌ ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ ÂüÁ¶
ÇÑ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
2
3
4


À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------