9.6> 다음 AbstractStack은 정수 스택 클래스로서 추상 클래스이다. 이를 상속받아 정수를 푸시, 팝하는 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{ private: int *p; int cap; //전체 크기(배열 크기) int index; //인덱스 -1은 empty public: IntStack(int cap,int index); ~IntStack(); bool push(int n); bool pop(int &n); int size(); void show(); }; IntStack::IntStack(int cap,int index=-1) { //cap 만큼 동적 배열 생성 this->cap=cap; this->index=index; p=new int[cap];}
IntStack::~IntStack(){delete []p;} //동적 배열 반환 bool IntStack::push(int n){ //배열 맨 끝에 원소 추가, 꽉찼으면 false 리턴 index++; if(index>=cap) {index--; return false;} else {p[index]=n; return true;} } bool IntStack::pop(int &n){ //마지막 원소 pop, 텅비었으면 false 리턴 int tmp=p[index]; index--; if(index<-1) {index++; return false;} else{n=tmp; return true;} //인자로 받은 참조에 pop한 값을 넣는다. } void IntStack::show(){ //현재 존재하는 원소 순회 출력 for(int i=0;i<index+1;i++){cout<<p[i]<<" ";} cout<<endl; } int IntStack::size() {return index+1;} //현재 존재하는 원소 개수 int main(void){ int pp; //팝된 정수를 넣을 변수 IntStack is(5); //cap 5짜리 인트 스택 int getpush=0; //푸시할 정수를 받을 변수 while(1){
int menu=0; //메뉴 선택용 변수 cout<<"1.푸시 2.팝 3.저장된 개수 (종료는 -1) >> "; cin>>menu; if(menu==1){ //1이면 푸시 int ps; cout<<"푸시 할 정수를 입력하세요>> "; cin>>ps; if(is.push(ps)){cout<<"푸시 성공!"<<endl;} else{cout<<"푸시 실패!"<<endl;} is.show(); } else if(menu==2){ //2면 팝 if(is.pop(pp)){cout<<"팝 성공! 팝 된 정수 : "<<pp<<endl;}else{cout<<"팝 실패!"<<endl;} is.show(); } else if(menu==3){ //3이면 개수 출력 cout<<"현재 길이 : "<<is.size()<<endl; is.show(); } else if(menu==-1){break;} //-1이면 루프 끝 else{cout<<"잘못된 입력입니다."<<endl; cin.clear(); cin.ignore(100,'\n'); //문자 입력시 버퍼 비워주기 위함.. continue;} //이상한 거 입력하면 다시 메뉴 } return 0; } |
<결과창>
|
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
논리 게이트 (0) | 2017.12.31 |
---|---|
while, do while loop class (0) | 2017.12.31 |
ForLoopAdder 클래스 (0) | 2017.12.31 |
KmToMile class (0) | 2017.12.31 |
WonToDollar Class (0) | 2017.12.31 |