<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>링크드 리스트 on Sobamemil</title>
    <link>https://blog.sobamemil.com/tags/%EB%A7%81%ED%81%AC%EB%93%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8/</link>
    <description>Recent content in 링크드 리스트 on Sobamemil</description>
    <generator>Hugo</generator>
    <language>ko</language>
    <lastBuildDate>Tue, 26 Nov 2019 13:00:11 +0900</lastBuildDate>
    <atom:link href="https://blog.sobamemil.com/tags/%EB%A7%81%ED%81%AC%EB%93%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>명품 C&#43;&#43; programming 실습 문제 9장 10번</title>
      <link>https://blog.sobamemil.com/posts/017-%EB%AA%85%ED%92%88-c-programming-%EC%8B%A4%EC%8A%B5-%EB%AC%B8%EC%A0%9C-9%EC%9E%A5-10%EB%B2%88/</link>
      <pubDate>Tue, 26 Nov 2019 13:00:11 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/017-%EB%AA%85%ED%92%88-c-programming-%EC%8B%A4%EC%8A%B5-%EB%AC%B8%EC%A0%9C-9%EC%9E%A5-10%EB%B2%88/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;간단한 그래픽 편집기를 콘솔 바탕으로 만들어보자. 그래픽 편집기의 기능은 &amp;ldquo;삽입&amp;rdquo;, &amp;ldquo;삭제&amp;rdquo;, &amp;ldquo;모두보기&amp;rdquo;, &amp;ldquo;종료&amp;rdquo; 의 4가지이고, 실행 과정은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/17/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;목적 및 힌트 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;추상 클래스, 상속 종합 응용&lt;/p&gt;
&lt;p&gt;Shape과 이를 상속받은 Circle, Line,Rect 클래스는 [그림9-13]을 이용하고 필요한 클래스와 main() 함수를 작성하라. 전체 프로그램은 대략 아래와 같이 구성된다.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/17/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183&lt;/td&gt;
          &lt;td&gt;#include&lt;iostream&gt;  #include&amp;lt;stdlib.h&amp;gt;    using namespace std;    class UI {  public:  static int show_menu() {  int num;  cout &amp;laquo; &amp;ldquo;삽입:1, 삭제:2, 모두보기:3, 종료:4 &amp;raquo;&amp;rdquo; ;  cin &amp;raquo; num;  return num;  }  static int input_shape() {  int num;  cout &amp;laquo; &amp;ldquo;선:1, 원:2, 사각형:3 &amp;raquo; &amp;ldquo;;  cin &amp;raquo; num;  return num;  }  static int del_index() {  int num;  cout &amp;laquo; &amp;ldquo;삭제하고자 하는 도형의 인덱스 &amp;raquo; &amp;ldquo;;  cin &amp;raquo; num;  return num;  }  };    class Shape { // Node  Shape* next;  protected:  virtual void draw() { cout &amp;laquo; &amp;ldquo;&amp;ndash;Shape&amp;ndash;&amp;rdquo; &amp;laquo; endl; }  public:  Shape() { next = NULL; }  virtual ~Shape() {}  Shape* add(Shape* p) {  this-&amp;gt;next = p;  return p;  }  Shape* getNext() { return next; }  void paint() { draw(); }  void setNext(Shape *p) { this-&amp;gt;next = p-&amp;gt;next; }  };    class Line : public Shape {  public:  virtual void draw() { cout &amp;laquo; &amp;ldquo;Line&amp;rdquo; &amp;laquo; endl; }  };    class Circle : public Shape {  public:  virtual void draw() { cout &amp;laquo; &amp;ldquo;Circle&amp;rdquo; &amp;laquo; endl; }  };    class Rect : public Shape {  public:  virtual void draw() { cout &amp;laquo; &amp;ldquo;Rectangle&amp;rdquo; &amp;laquo; endl; }  };      class GraphicEditor { // List  int node_size;  Shape* pStart;  Shape* pLast;  public:  GraphicEditor() {  pStart = NULL;  node_size = 0;  }  int run() {  cout &amp;laquo; &amp;ldquo;그래픽 에디터입니다.\n&amp;rdquo;;  while(true){  int num;  num = UI::show_menu();  switch (num){  case 1:{  num = UI::input_shape();  input_new(num);  break;  }  case 2:{  if(pStart == NULL){  cout &amp;laquo; &amp;ldquo;List Empty\n&amp;rdquo;;  break;  }  num = UI::del_index();  del(num);  break;  }  case 3:{  show();  break;  }  case 4:{  exit(0);  }  default :  cout &amp;laquo; &amp;ldquo;메뉴를 잘못 선택하셨습니다.\n&amp;rdquo;;  }  }  }  void input_new(int n) {  switch (n){  case 1: {  if(node_size == 0) {  pStart = new Line();  pLast = pStart;  }  else  pLast = pLast-&amp;gt;add(new Line());  node_size++;  break;  }  case 2: {  if(node_size == 0){  pStart = new Circle();  pLast = pStart;  }  else  pLast = pLast-&amp;gt;add(new Circle());  node_size++;  break;  }  case 3: {  if(node_size == 0){  pStart = new Rect();  pLast = pStart;  }  else  pLast = pLast-&amp;gt;add(new Rect());  node_size++;  break;  }  default :  cout &amp;laquo; &amp;ldquo;메뉴를 잘못 선택하셨습니다.\n&amp;rdquo;;  }    }  bool del(int n) {  int k=0;  Shape* target_node = pStart;  Shape* priv_node;  if(n == 0){  pStart = pStart-&amp;gt;getNext();  delete target_node;  }  else{  while( (target_node != NULL) &amp;amp;&amp;amp; (k &amp;lt; n)){  priv_node = target_node;  target_node = target_node-&amp;gt;getNext();  k++;  }  if(target_node == NULL){  cout &amp;laquo; &amp;ldquo;없는 노드입니다.\n&amp;rdquo;;  return false;  }  else {  priv_node-&amp;gt;setNext(target_node);  delete target_node;  }  }  node_size&amp;ndash;;    }  void show() {  Shape* p = pStart;  int i=0;  if(p == NULL)  cout &amp;laquo; &amp;ldquo;List Empty\n&amp;rdquo;;  else  while(p != NULL){  cout &amp;laquo; i &amp;laquo; &amp;ldquo;: &amp;ldquo;;  p-&amp;gt;paint();  p = p-&amp;gt;getNext();  i++;  }  }  };    int main() {  GraphicEditor* g_editor = new GraphicEditor;  g_editor-&amp;gt;run();  delete g_editor;  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
