[C++]°­ÁÂ(26)<--C++ÀÇ ºÎÇ°





¶ó. Ŭ·¡½º Á¤ÀÇ °üÇà

Ŭ·¡½ºÀÇ °³³ä°ú ±âº»ÀûÀÎ ¹®¹ý ±¸Á¶, °Å±â´Ù°¡ »ó¼Ó±îÁö °øºÎ¸¦ ÇßÀ¸¸é ÀÌÁ¦
ÀÌ¹Ì OOP¿¡ ÀÔ¹®ÇÑ °ÍÀ̸ç OOP À̳信 ´ëÇØ Á¶±ÝÀ̳ª¸¶ ÀÌÇØÇßÀ» °ÍÀÌ´Ù. ÀÌÁ¦
±îÁö ¿¹Á¦·Î µé¾ú´ø ÇÁ·Î±×·¥µéÀº ÀÌÇظ¦ °£´ÜÇÏ°Ô ÇÏ°í ºÐ¼®ÇÏ´Â µ¥ À־
È¥¶õ½º·´Áö ¾Êµµ·Ï Çϱâ À§ÇØ ¸ðÁ¶¸® ´ÜÀÏ ¸ðµâ·Î ®¾ú´Ù. ÇϳªÀÇ ¼Ò½º ÆÄÀÏ¿¡
Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í main ÇÔ¼ö±îÁö °°ÀÌ µé¾î
ÀÖ¾ú´Ù.
ÇÏÁö¸¸ ½ÇÁ¦ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§´Â ÀÌ·± ½ÄÀ¸·Î ´ÜÀÏ ¸ðµâ·Î ÇÁ·Î±×·¥À» Â¥´Â
°æ¿ì´Â º°·Î ¾ø´Ù. ¹°·Ð ÇÁ·Î±×·¡¸ÓÀÇ °³¼º¿¡ µû¶ó¼­´Â ±×·² ¼öµµ ÀÖÁö¸¸ À¯Áö
º¸¼öÀÇ Æí¸®, ÄÄÆÄÀÏ ½Ã°£ÀÇ Àý¾à, °øµ¿ ÀÛ¾÷ µîÀ» À§Çؼ­´Â ¿©·¯ ¸ðµâ·Î ³ª´©
¾î¼­ ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀº ¹°·Ð Ŭ·¡½ºÀÇ Á¤Àdzª ¸â¹ö ÇÔ¼öÀÇ Á¤ÀÇ, Ŭ·¡½ºÀÇ
»ç¿ëµéÀ» º°µµÀÇ ÆÄÀÏ·Î ³ª´©¾î¼­ ÇÑ´Ù.
µÎ ¸íÀÇ ÇÁ·Î±×·¡¸Ó°¡ °øµ¿ ÀÛ¾÷À» ÇÏ¿© moduleA.cpp¿Í moduleB.cpp¸¦ ¸¸µé°í
ÀÖÀ¸¸ç ÀÌ ÇÁ·Î±×·¥¿¡ classA¶ó´Â Ŭ·¡½º°¡ »ç¿ëµÇ°í ÀÖ´Ù°í ÇÏÀÚ. ¾Æ¸¶ µÎ ¸ð
µâ¿¡ ´ÙÀ½°ú °°ÀÌ ¹èºÐµÇ¾î ÄÚµùµÉ °ÍÀÌ´Ù.


   ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤              ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
   ¦¢classA Á¤ÀÇ     ¦¢              ¦¢                ¦¢
   ¦¢¸â¹ö ÇÔ¼ö Á¤ÀÇ  ¦¢              ¦¢ classAÁ¤ÀÇ     ¦¢
   ¦¢main()          ¦¢              ¦¢ moduleBÀÇ ÇÔ¼ö ¦¢
   ¦¢moduleAÀÇ ÇÔ¼ö  ¦¢              ¦¢                ¦¢
   ¦¢                ¦¢              ¦¢                ¦¢
   ¦¢                ¦¢              ¦¢                ¦¢
   ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥              ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
     modulea.cpp                         moduleb.cpp


µÎ ¸ðµâ¿¡¼­ classA¸¦ ¸ðµÎ »ç¿ëÇÏ¸ç µÑ ´Ù classA°¡ ¾î¶² ¸ð¾çÀ» ÇÏ°í ÀÖ´Â
Áö ¾Ë¾Æ¾ß ÇϹǷΠ¾çÂÊ¿¡ ´Ù classA¸¦ ¼±¾ðÇÏ°í ÀÖ´Ù. ±×¸®°í Ŭ·¡½º¿¡ ¼ÓÇÑ
¸â¹ö ÇÔ¼ö´Â Çѹø¸¸ ÄÄÆÄÀϵǾî¾ß ÇϹǷΠµÎ ¸ðµâ Áß ÇÑÂÊ¿¡¸¸ µé¾î°¡¾ß ÇÑ´Ù.
ÀÌ·± ÇüÅ´ ¿©·¯ °¡Áö ¸é¿¡¼­ °ï¶õÇÑ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.
¿ì¼± classAÀÇ ¼±¾ðÀÌ µÎ ¸ðµâ¿¡ µ¿½Ã¿¡ ³ªÅ¸³µÀ¸¹Ç·Î º¸±âµµ ¾ÈÁÁ°í ¼öÁ¤ÀÌ
°ï¶õÇÏ´Ù. classA¸¦ ¼öÁ¤ÇÏ·Á¸é µÎ ¸ðµâÀ» µ¿½Ã¿¡ °°ÀÌ ¼öÁ¤ÇØÁÖ¾î¾ß Çϱ⠶§
¹®ÀÌ´Ù. ÀÌ·± °ï¶õÇÑ Á¡À» ¾ø¾Ö±â À§Çؼ­´Â classAÀÇ Á¤ÀǸ¦ º°µµÀÇ Çì´õ ÆÄÀÏ
¿¡ µÎ°í includeÇؼ­ ¾²´Â ÆíÀÌ ÁÁ´Ù. ±×¸®°í ¸â¹ö ÇÔ¼öÀÇ Á¤Àǵµ µû·Î ÆÄÀÏÀ»
¸¸µé¾î ºÐ¸®½ÃÅ°´Â ÆíÀÌ ÁÁ´Ù. ±×·¡¼­ ´Ù½Ã ÀÌ ¸ðµâÀ» ¼öÁ¤Çغ¸¸é ´ÙÀ½°ú °°ÀÌ
µÉ °ÍÀÌ´Ù.
                                                             
 ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤            ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
 ¦¢                  ¦¢/          \¦¢                      ¦¢
 ¦¢  main()          ¦§¦¡¦¡¦¡¦¨¦¡¦¡¦©                      ¦¢
 ¦¢                  ¦¢\     ¦¢   /¦¢   moduleBÀÇ ÇÔ¼ö     ¦¢
 ¦¢  moduleAÀÇ ÇÔ¼ö  ¦¢      ¦¢    ¦¢                      ¦¢
 ¦¢                  ¦¢      ¦¢    ¦¢                      ¦¢
 ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥      ¦¢    ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
    modulea.cpp              ¦¢          moduleb.cpp
                             ¦¢Æ÷ÇÔ
                             ¦¢   
 ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤      ¦¢    ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
 ¦¢                  ¦¢/     ¦¢    ¦¢                      ¦¢
 ¦¢                  ¦§¦¡¦¡¦¡¦ª¦¡¦¡¦©                      ¦¢
 ¦¢ ¸â¹ö ÇÔ¼ö Á¤ÀÇ   ¦¢\           ¦¢  classA Á¤ÀÇ         ¦¢
 ¦¢                  ¦¢            ¦¢                      ¦¢
 ¦¢                  ¦¢            ¦¢                      ¦¢
 ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥            ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
       classa.cpp                         classa.h


ÀÌ·¸°Ô ¸ðµâÀ» ³ª´©´Â ¹æ¹ýÀÌ °¡Àå ÇÕ¸®ÀûÀÎ ¹æ¹ýÀÌ°í °¡Àå º¸ÆíÀûÀ¸·Î ¸¹ÀÌ
»ç¿ëµÇ´Â ¹æ¹ýÀÌ´Ù. Ŭ·¡½º Çϳª¿¡ ´ëÇØ Çì´õ ÆÄÀÏ°ú CPP ÆÄÀÏÀ» ¸¸µé¾î µÎ°í
Çì´õ ÆÄÀÏ¿¡¼­´Â Ŭ·¡½º Á¤ÀǸ¦ ÇÏ°í CPP ÆÄÀÏ¿¡¼­´Â Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¤
ÀÇÇÑ´Ù. ÀÌ ¹æ¹ý´ë·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ½À°üÀ» µéÀÌ°Ô µÇ¸é ÇÁ·Î±×·¡¹Ö ÀÛ¾÷
ÀÌ ¿ëÀÌÇØÁö´Â °ÍÀº ¹°·Ð ´Ù¸¥ ÇÁ·Î±×·¡¸Ó°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À» ºÐ¼®Çϱ⵵ ÈÎ
¾À ´õ ½¬¿öÁø´Ù.
ÀÏ´Ü Å¬·¡½º¸¦ ºÐ¼®Çغ¸°í, ¸â¹ö ÇÔ¼ö¸¦ ºÐ¼®ÇÏ°í ¸ðµâÀ» Â÷·Ê´ë·Î ºÐ¼®ÇØ ³ª
°¡¸é µÈ´Ù. ±×¸®°í Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â Çì´õ ÆÄÀÏ¿¡´Â ¹Ýµå½Ã Á¶°ÇºÎ ÄÄÆÄÀÏ Áö
½ÃÀÚ¸¦ ³Ö´Â °ÍÀÌ ÁÁ´Ù. Ŭ·¡½ºÀÇ ¼±¾ðÀº ÇÑ ¸ðµâ¿¡ Çѹø ³ªÅ¸³ª¾ß Çϸç Áߺ¹
µÇ¾î¼­´Â ¾ÈµÈ´Ù. Çì´õ ÆÄÀϳ¢¸® »ó¼ÓÀ» À§ÇØ ¼­·Î include¸¦ º¹ÀâÇÏ°Ô ÇÏ´Ùº¸
¸é ÇÑ Å¬·¡½ºÀÇ Á¤ÀÇ°¡ µÎ ¹ø ³ªÅ¸³ª´Â °æ¿ì°¡ Àִµ¥ ÀÌ·± Çö»óÀ» ¹æÁöÇϱâ
À§Çؼ­ Á¶°ÇºÎ ÄÄÆÄÀÏ preprocessor¸¦ »ç¿ëÇÑ´Ù. Á¶°ÇºÎ ÄÄÆÄÀÏÀÇ ÀϹÝÀû ÇüÅÂ
´Â ´ÙÀ½°ú °°´Ù.

#ifndef _CLASSA
#define _CLASSA

class classA
  {
     classAÀÇ Á¤ÀÇ
      .
      .
      .

  }
#endif

ÀÌ·¸°Ô Á¶°ÇºÎ ÄÄÆÄÀÏ Áö½Ã ¾È¿¡ Ŭ·¡½ºÀÇ Á¤ÀÇ°¡ µé¾îÀÖÀ¸¸é Çì´õ ÆÄÀÏÀÌ µÎ
¹ø includeµÇ´õ¶óµµ ÄÄÆÄÀÏÀº Çѹø¸¸ ÀÌ·ç¾îÁö±â ¶§¹®¿¡ ¾ÈÀüÇÏ´Ù. ¹°·Ð ÀÚ±â
°¡ Ŭ·¡½º Á¤ÀǸ¦ Áߺ¹½ÃÅ°Áö ¾Ê´Â´Ù´Â È®½ÅÀÌ ÀÖ´Ù¸é ÀÌ °úÁ¤Àº »ý·«Çصµ ¹«
¹æÇÏ´Ù. ´Ù¸¥ ÇÁ·Î±×·¡¸ÓÀÇ ÇÁ·Î±×·¥ Áß¿¡ ÀÌ·± ¹®±¸¸¦ ¹ß°ßÇÏ¸é °í¹ÎÇÏÁö ¸»
°í °üÇà»ó ±×·¸°Ô ÇÏ´Â °ÍÀ¸·Î Çؼ®ÇÏ¸é µÈ´Ù.


**********************************************
**********************************************
3-3 °¡»ó ÇÔ¼ö


ÀÌ Àå¿¡¼­´Â OOPÀÇ ¶Ç ´Ù¸¥ Ư¡ÀÎ °¡»ó ÇÔ¼ö(virtual function)¿¡ ´ëÇØ ¾Ë¾Æ
º»´Ù. ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ¾î¶°ÇÑ ÇÔ¼ö¸¦ È£ÃâÇÒÁö¸¦ °áÁ¤ÇÏ´Â °ÍÀ» ¹ÙÀεù(bind
ing)À̶ó°í ÇÑ´Ù. C¿¡¼­´Â ÇÔ¼öÀÇ À̸§¿¡ ÀÇÇØ È£ÃâµÉ ÇÔ¼ö¸¦ °áÁ¤Çϸç C++¿¡
¼­´Â ÇÔ¼öÀÇ À̸§»Ó¸¸ ¾Æ´Ï¶ó ÀμöÀÇ °³¼ö¿Í µ¥ÀÌÅÍ Å¸ÀÔÀ» º¸°í °áÁ¤ÇÑ´Ù. ¹Ù
ÀεùÀº ¾ðÁ¦ ÀÌ·ç¾îÁö´Â°¡¿¡ µû¶ó ´ÙÀ½ µÎ °¡Áö·Î ³ª´©¾îÁø´Ù.

Á¤Àû ¹ÙÀεù(static binding) :  ÄÄÆÄÀ쵃 ¶§ ÇÔ¼ö¸¦ °áÁ¤ÇÑ´Ù. ÄÄÆÄÀϽà ÇÔ¼ö
À̸§°ú Àμö¿¡ ÀÇÇØ È£ÃâµÉ ÇÔ¼öÀÇ ¹øÁö¸¦ ±¸Çس½´Ù.
µ¿Àû ¹ÙÀεù(dynamic binding) :  ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ È£ÃâµÉ ÇÔ¼ö°¡ °áÁ¤µÈ
´Ù.

C++Àº µÎ °¡Áö ¹ÙÀεù Áß¿¡¼­ Á¤Àû ¹ÙÀεùÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª C++¿¡¼­ ´Ü ÇÏ
³ªÀÇ ¿¹¿Ü°¡ Àִµ¥ °¡»ó ÇÔ¼ö¸¸ µ¿Àû ¹ÙÀεùÀ» »ç¿ëÇÑ´Ù. ¹°·Ð Çö ´Ü°è¿¡¼­´Â
ÀÌ°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ¾ó¸¥ ÀÌÇØÇÏÁö ¸øÇÏ°ÚÁö¸¸ ´Ü°èº°·Î °¡»ó ÇÔ¼öÀÇ Á¤
ÀÇ¿¡ ´ëÇØ ÇнÀÇØ ³ª°¡¸é¼­ ¼­¼­È÷ ±× Àǹ̸¦ ¾Ë°Ô µÉ °ÍÀÌ´Ù.


°¡. ÀÌÂ÷ »ó¼Ó

¿¹Á¦ 19-1À» Á¶±Ý ¼öÁ¤Çؼ­ Point Ŭ·¡½º¿¡ »õ·Î¿î  ¸â¹ö ÇÔ¼ö¸¦ Çϳª ´õ Ãß
°¡½ÃÄÑ Á¡ÀÌ ¿òÁ÷ÀÏ ¼ö ÀÖµµ·Ï ¸¸µé¾î º¸¾Ò´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇà½ÃÅ°¸é Á¡ ÇÏ
³ª°¡ È­¸é»ó ÀÓÀÇÀÇ À§Ä¡·Î 100¹ø À̵¿ÇÑ´Ù.

#include <iostream.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
enum Boolean {false,true};
class Position {
protected:
 int px,py;
public:
 Position(int,int);
 int Getpx() {return px;}
 int Getpy() {return py;}
};
class Point:public Position {
protected:
 int Color;
 Boolean Visible;
public:
 Point(int,int,int);
 int Getcolor() {return Color;}
 Boolean Getvisible() {return Visible;}
 void Show();
 void Hide();
 void Moveto(int,int);
};
Position::Position(int x,int y)
{
px=x;
py=y;
}
Point::Point(int x,int y,int c):Position(x,y)
{
Color=c;
Visible=false;
}
void Point::Show()
{
Visible=true;
putpixel(px,py,Color);
}
void Point::Hide()
{
Visible=false;
putpixel(px,py,getbkcolor());
}
void Point::Moveto(int nx,int ny)  // Á¡ÀÇ À§Ä¡¸¦ ¿Å±ä´Ù.
{
Hide();     // ¿ø·¡ ÀÖ´ø Á¡À» Áö¿ò
px=nx;      // À§Ä¡ º¯°æ
py=ny;
Show();     // º¯°æµÈ À§Ä¡¿¡ ´Ù½Ã ±×¸²
delay(100); // °á°ú¸¦ ÀÚ¼¼È÷ º¸±â À§ÇÑ delay
}
void main()
{
int gd=0,gm;
initgraph(&gd,&gm,"");
Point HERE(100,100,14);   // °´Ã¼ÀÇ »ý¼º
HERE.Show();
for (int i=0;i<100;i++)   // ÀÓÀÇÀÇ À§Ä¡·Î Á¡À» ¿Å±ä´Ù.
HERE.Moveto(random(getmaxx()),random(getmaxy()));
closegraph();
}


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


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