C++/상속과 다형성

양수만 삽입하는 stack 구현 (Reuse mechanism: inheritance)

(15002)

Stack class에서 상속을 받아 데이터가 0 이상인 것만 삽입하고 음수인 경우는 무시하는 PositiveStack class를 만든다.
예를 들어 4 -3 2 1 을 입력한다면 4 2 1 만 입력되어야 한다.


#include <iostream>
using namespace std;
class Stack{
public:
        class node{
        public:
                int data;
                node * next;
                node(int x, node *nxt):data(x), next(nxt){}
        };
        Stack(); void insert(int); int pop();
        void show();
protected:
        node *first;
};
Stack::Stack(){ first = 0; }
void Stack::insert(int x){
        node * temp;
        temp = new node(x, first);
        temp->next = first;
        first = temp;
}
int Stack::pop(){
        int retval;
        node * temp;
        if (first==0) return -1;
        retval = first->data;
        temp = first;
        first = first->next;
        delete temp;
        return retval;
}

void Stack::show(){
        node *temp;
        for (temp = first; temp; temp = temp->next )
                cout << temp->data << " --> ";
        cout << "END\n";
}

//class PositiveStack 을 여기에 정의한다.
class PositiveStack :public Stack{
        private:
                int x;
        public:
                void insert(int x){
                        if(x>0){
                                Stack::insert(x);
                        }
                }
                /* 불필요한 override!
                void pop(){
                                Stack::pop();
                }
                void show(){
                        Stack::show();
                }
                */
};

int main() {
        Stack s;
        PositiveStack ps;

        s.insert(1);
        s.insert(2);
        s.insert(-3);
        s.insert(4);
        s.show();

 

        ps.insert(1); 
        ps.insert(2); 
        ps.insert(-3); 
        ps.insert(4); 
        ps.show();

}


<실행결과>


4 --> -3 --> 2 --> 1 --> END
4 --> 2 --> 1 --> END