ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 9장 6번
    C++ 2018. 11. 6. 18:23

    6. 다음 AbstractSack 은 정수 스택 클래스로서 추상 클래스이다.


    class AbstractStack {
    public:
        virtual bool push(int n) = 0; // 스택에 n을 푸시한다. 스택이 full이면 false 리턴
        virtual bool pop(int& n) = 0; // 스택에서 팝한 정수를 n에 저장하고 스택이 empty이면 false 리턴
        virtual int size() = 0; // 현재 스택에 저장된 정수의 개수 리턴
    };


    이를 상속받아 정수를 푸시, 팝하는 IntStack 클래스를 만들고 사용 사례를 보여라.


    소스코드


    #include <iostream>
    using namespace std;
    class AbstractStack {
    public:
        virtual bool push(int n) = 0; // 스택에 n을 푸시한다. 스택이 full이면 false 리턴
        virtual bool pop(int& n) = 0; // 스택에서 팝한 정수를 n에 저장하고 스택이 empty이면 false 리턴
        virtual int size() = 0; // 현재 스택에 저장된 정수의 개수 리턴
    };
    class IntStack : public AbstractStack {
        int *p;
        int tos;
        int stackSize;
    public:
        IntStack(int size) { this->stackSize = size; p = new int[stackSize]; tos = -1; }
        ~IntStack() { delete[] p; }
        bool push(int n);
        bool pop(int& n);
        int size();
    };
    bool IntStack::push(int n) {
        if (tos == (stackSize - 1)) return false;
        ++tos;
        p[tos] = n;
        return true;
    }
    bool IntStack::pop(int &n) {
        if (tos == (-1)) return false;
        n = p[tos];
        --tos;
        return true;
    }
    int IntStack::size() {
        return tos+1;
    }
    int main() {
        IntStack intStack(5);
        for (int i = 0; i<10; i++) { // 처음 5 개를 성공적으로 push되고 다음 5 개는 스택 full로 push 실패
            if (intStack.push(i)) cout << "push 성공" << endl;
            else cout << "스택 full" << endl;
        }
        cout << "현재 들어있는 정수 개수" << intStack.size() << endl;
        int n;
        for (int i = 0; i<10; i++) { // 처음 5 개를 성공적으로 pop되고 다음 5 개는 스택 empty로 pop 실패
            if (intStack.pop(n)) cout << "pop 성공 " << n << endl;
            else cout << "스택 empty" << endl;
        }
    }


    실행결과



    스택을 추상 클래스로 표현하고 구현하는 문제입니다.

    순수 가상 함수를 파생클래스에서 구현합니다.

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

    명품 C++ 9장 9번  (0) 2018.11.07
    명품 C++ 9장 7번 8번  (0) 2018.11.06
    명품 C++ 9장 5번  (0) 2018.11.06
    명품 C++ 9장 3번 4번  (0) 2018.11.06
    명품 C++ 9장 1번 2번  (0) 2018.11.06

    댓글

© 2018 TISTORY. All rights reserved.