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