-
명품 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