[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
ÀÌ¾î¼ °è¼ÓµË´Ï´Ù. ==============>>>>>>>
--------------------------------------------------------------------------------