A sentimental robot

순수 가상함수 본문

C++

순수 가상함수

GOD03219 2018. 10. 2. 11:36

순수가상함수

 

  • virtual void func()=0;
  • 바디가 없고 선언만 한다. =0를 붙힌다.

      • 순수가상함수를 한개 이상 가지고 있는 클래스는 추상 클래스로, 선언이 불가능하다.
      • 오버라이딩 강제성 > 상속받은 자식이 오버라이딩을 꼭 해줘야 한다. ( 안하면 같이 추상클래스화 된다)
      • 코드의 확장성+유지보수

       

       

      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
      #include<iostream>
      using namespace std;
       
      class Memory {
       
      protected:
       
          int array1[5];
          int top;
       
      public:
          Memory()
          {
              top = 0;
          }
          void push(int n) {
       
              if (top >= 5)
              {
                  cout << "Already full" << endl;
                  return;
              }
              array1[top++= n;
       
          }
          virtual void pop() = 0;
      };
      class Mystack : public Memory {
       
      public:
       
          virtual void pop() {
       
              if (top <= 0)
              {
                  cout << "Empty" << endl;
                  return;
              }
              cout << "나온 값 => " << array1[--top] << endl;
          }
       
      };
      class MyQueue : public Memory {
       
          int front;
          int rear;
       
      public:
          MyQueue()
          {
              front = 0;
              rear = top;
          }
       
          virtual void pop() {
       
              if (top <= 0)
              {
                  cout << "Empty" << endl;
                  return;
              }
              cout << "나온 값 => " << array1[front++<< endl;
              --top;

              --front;

          }
       
      };
      int main() {
       
          Memory *mem;
          Mystack ms;
          MyQueue mq;
       
          int p;
          int s;
          int s1;
       
          while (true)
          {
              cout << "=== 1. Stack 2. Queue === " << endl;
              cin >> s;
              cout << "----- 1.push 2. pop ----- " << endl;
              cin >> s1;
       
              switch (s)
              {
              case 1:
                  mem = &ms;
                  if (s1 == 1) {
                      cout << "넣을 값 => ";
                      cin >> p;
                      mem->push(p);
                      continue;
                  }
                  else if (s1 == 2) {
       
                      mem->pop();
                      continue;
                  }break;
              case 2:
                  mem = &mq;
                  if (s1 == 1) {
                      cout << "넣을 값 => ";
                      cin >> p;
                      mem->push(p);
                      continue;
                  }
                  else if (s1 == 2) {
                      mem->pop();
                      continue;
                  }break;
              default:
                  break;
              }
          }
      }
      cs

      'C++ ' 카테고리의 다른 글

      파일 입출력  (0) 2018.10.02
      Template  (0) 2018.10.02
      virtual function  (0) 2018.10.01
      상속  (0) 2018.10.01
      가상상속  (0) 2018.10.01