[C++]°­ÁÂ(33)<--´ÙÁß»ó¼Ó(Ãß»óŬ·¡½º)





¶ó. Ãß»ó Ŭ·¡½º

Ãß»ó Ŭ·¡½º¶õ Ŭ·¡½º ÀÚü°¡ ³Ê¹« ÀϹÝÀûÀΠƯ¼ºÀ» °¡Áö±â ¶§¹®¿¡ °´Ã¼¸¦ »ý
¼ºÇÏ¿© ½ÇÁ¦·Î »ç¿ëÇϱ⿡ ºÎÀû´çÇÑ Å¬·¡½º¸¦ ¸»ÇÑ´Ù. ÇÏÁö¸¸ Ãß»ó Ŭ·¡½ºÀÇ
ÀϹÝÀûÀΠƯ¼ºÀ» ÆÄ»ý Ŭ·¡½º¿¡¼­ Á» ´õ µ¡ºÙ¿© ½ÇÁ¦ »ç¹°À» Ç¥ÇöÇÒ ¼ö ÀÖ±â
¶§¹®¿¡ Ãß»ó Ŭ·¡½º ±× ÀÚü·Î´Â ¾µ¸ð°¡ ¾øÁö¸¸ ÆÄ»ýÀ» ÇÒ °æ¿ì´Â ¾µ¸ð°¡ ÀÖ´Ù.
¿¹¸¦ µé¾î "µÕ±Û°í °í¹«·Î µÈ ź·Â¼ºÀÌ ÀÖ´Â ¹°°Ç"À̶ó´Â Ư¼ºÀ» °¡Áö´Â Ŭ·¡
½º´Â Ư¼ºÀÌ ±¸Ã¼ÀûÀ̹ǷΠÃ౸°øÀ̳ª ¾ß±¸°ø µûÀ§ÀÇ °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ´Ù. ±×
·¯³ª "µÕ±Ù ¹°°Ç"À̶ó´Â Ư¼ºÀ» °¡Áø Ŭ·¡½º´Â ³Ê¹« ÀϹÝÀûÀÎ(=±¤¹üÀ§ÇÑ) Ư¡
À» °¡Áö¹Ç·Î °´Ã¼¸¦ ¸¸µé±â ¾î·Æ´Ù. Ãß»ó Ŭ·¡½ºÀÇ ¾ÆÁÖ ÁÁÀº ¿¹·Î ±×·¡ÇÈ È­
¸é»óÀÇ ÇÑ ÁÂÇ¥¸¦ °¡Áö´Â Position Ŭ·¡½º¸¦ µé ¼ö ÀÖ´Ù.

class Position {
  protected:
    int px,py;
      .
      .
      .

ÀÌ Å¬·¡½º´Â À§Ä¡¸¸À» °¡Áö±â ¶§¹®¿¡ ¾î¶°ÇÑ ±×·¡ÇÈ ¿ä¼Òµµ Ç¥ÇöÇÒ ¼ö°¡ ¾ø´Ù.
°¡Àå °£´ÜÇÑ ±×·¡ÇÈ ¿ä¼ÒÀÎ Á¡Á¶Â÷µµ »ö»óÀ» ÁöÁ¤ÇÒ ´É·ÂÀÌ ¾ø±â ¶§¹®¿¡ Ç¥Çö
ÀÌ ºÒ°¡´ÉÇÏ¸ç ´ÜÁö À§Ä¡¸¸À» °¡Áú »ÓÀÌ´Ù.
ÇÏÁö¸¸ ÀÌ Å¬·¡½º´Â ¸ðµç ±×·¡ÇÈ ¿ä¼Ò¿¡¼­ °øÅëµÈ ¿ä¼ÒÀÎ À§Ä¡¸¦ °¡Áö¹Ç·Î ÆÄ
»ýÀ» ÇÒ °æ¿ì´Â ÆÄ»ý Ŭ·¡½º ÀÚü°¡ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. Á¡À» ³ªÅ¸³»´Â
Point °´Ã¼¸¦ ÀÌ Å¬·¡½º·ÎºÎÅÍ ÆÄ»ý½ÃÄÑ »ö»óÀ» ³ªÅ¸³»´Â µ¥ÀÌÅÍ ¸â¹ö¸¸ µ¡ºÙ
ÀÌ¸é µÇ¸ç ¿øÀº »ö»ó°ú, ¹ÝÁö¸§À» µ¡ºÙÀÌ°í, ¼±Àº ³¡Á¡ÀÇ ÁÂÇ¥¿Í »ö»óÀ» µ¡ºÙ
ÀÌ¸é µÈ´Ù. ±×¿ÜÀÇ ´Ù¸¥ ±×·¡ÇÈ ¿ä¼Òµéµµ Position Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ý½ÃÄÑ ³ª
°¥ ¼ö ÀÖ´Ù.
Ãß»ó Ŭ·¡½º¶õ ÀÌ·¸°Ô ÆÄ»ýÀ» ¸ñÀûÀ¸·Î ¸¸µé¾îÁö´Â ±â¹Ý Ŭ·¡½ºÀ̸ç Ãß»ó Ŭ
·¡½ºÀÇ ¸â¹ö ÇÔ¼ö´Â °´Ã¼¸¦ °¡ÁöÁö ¾Ê±â ¶§¹®¿¡ Äڵ带 °¡Áú ÇÊ¿ä°¡ ¾ø´Ù. ´Ü
ÆÄ»ý Ŭ·¡½º¿¡¼­ ¸â¹ö ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ¿© ¾µ ¼ö ÀÖµµ·Ï °¡»ó ÇÔ¼ö·Î ¸â¹ö ÇÔ¼ö
¸¦ Á¤ÀÇÇØÁֱ⸸ ÇÏ¸é µÈ´Ù. Äڵ带 ÀüÇô Á¤ÀÇÇÏÁö ¾ÊÀº °¡»ó ÇÔ¼ö¸¦ ¼ø¼ö °¡
»ó ÇÔ¼ö(pure virtual function)¶ó°í ÇÏ¸ç ´ÙÀ½°ú °°ÀÌ ÇÔ¼öÀÇ º»Ã¼ ´ë½Å¿¡ "=
0"¸¦ ºÙ¿© ÁÖ¸é µÈ´Ù.

virtual void func()=0;

Ãß»ó Ŭ·¡½º¿¡¼­ °¡»ó ÇÔ¼ö·Î ¼±¾ðÇÑ ÀÌ ¸â¹ö ÇÔ¼ö´Â ÆÄ»ý Ŭ·¡½º¿¡¼­ º°µµ·Î
virtualÀ» ºÙ¿©ÁÖÁö ¾Ê¾Æµµ °¡»ó ÇÔ¼ö°¡ µÈ´Ù. Ãß»ó Ŭ·¡½º¸¦ »ç¿ëÇÑ ¿¹¸¦ º¸
ÀÚ.

#include <iostream.h>
#include <graphics.h>
#include <conio.h>
class Position {                         // Ãß»ó Ŭ·¡½º Á¤ÀÇ
 protected:
   int px,py;
 public:
   Position(int x,int y)
     {
     px=x;
     py=y;
     }
   virtual void Show()=0;           // ¼ø¼ö °¡»ó ÇÔ¼ö·Î ¼±¾ð
   virtual void Hide()=0;
 };
class Point:public Position {            // ÆÄ»ý Ŭ·¡½º Á¤ÀÇ
 protected:
   int Color;
 public:
   Point(int x,int y,int c):Position(x,y)
     {
     Color=c;
     }
   void Show();
   void Hide();
 };
class Circle:public Point {      // ÆÄ»ý Ŭ·¡½º Á¤ÀÇ
 private:
   int Rad;
 public:
   Circle(int x,int y,int r,int c):Point(x,y,c)
     {
     Rad=r;
     }
   void Show();
   void Hide();
 };
class Line:public Point {                // ÆÄ»ý Ŭ·¡½º Á¤ÀÇ
 private:
   int ex,ey;
 public:
   Line(int x1,int y1,int x2,int y2,int c):Point(x1,y1,c)
     {
     ex=x2;
     ey=y2;
     }
   void Show();
   void Hide();
 };
void Point::Show()      
 {
 putpixel(px,py,Color);
 }
void Point::Hide()
 {
 putpixel(px,py,getbkcolor());
 }
void Circle::Show()
 {
 setcolor(Color);
 circle(px,py,Rad);
 }
void Circle::Hide()
 {
 setcolor(getbkcolor());
 circle(px,py,Rad);
 }
void Line::Show()
 {
 setcolor(Color);
 line(px,py,ex,ey);  }
void Line::Hide()
 {
 setcolor(getbkcolor());
 line(px,py,ex,ey);
 }
void main()
{
int gd=0,gm;
initgraph(&gd,&gm,"");
Point P(100,100,14);          // Á¡ °´Ã¼ »ý¼º
Circle C(120,120,50,4);       // ¿ø °´Ã¼ »ý¼º
Line L(20,200,180,220,15);    // ¼± °´Ã¼ »ý¼º
P.Show();                     // °¢ °´Ã¼¸¦ Ãâ·ÂÇÑ´Ù.
C.Show();
L.Show();
getch();
P.Hide();                     // °¢ °´Ã¼¸¦ ¼û±ä´Ù.
C.Hide();
L.Hide();
getch();
closegraph();
}

Ŭ·¡½ºÀÇ °èÃþµµ¸¦ ±×¸®¸é ´ÙÀ½°ú °°´Ù.


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


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