1. 문제
6. 문제 5번의 MyIntStack를 수정하여 다음과 같이 선언하였다. 스택에 저장할 수 있는 정수의 최대 개수는 생성자에서 주어지고 size 멤버에 유지한다. MyIntStack 클래스를 작성하라.
MyIntStack 클래스를 활용하는 코드와 실행 결과는 다음과 같다.
2. 결과
3. 코드
#include <iostream>
using namespace std;
class MyIntStack {
int *p;
int size;
int tos;
public :
MyIntStack();
MyIntStack(int size){ tos=-1; p = new int[size]; this->size = size; }
MyIntStack(MyIntStack& s);
~MyIntStack(){ delete [] p; }
bool push(int n);
bool pop(int &n);
};
bool MyIntStack::push(int n) {
tos++;
if( tos == 10 )
return false;
else {
p[tos] = n;
return true;
}
}
bool MyIntStack::pop(int &n) {
if( tos == -1 )
return false;
else {
n = p[tos];
return true;
}
tos--;
}
MyIntStack::MyIntStack(MyIntStack& s){
this->p = new int[s.size];
this->size = s.size;
this->tos = s.tos;
for(int i=0; i<=s.tos; i++)
this->p[i] = s.p[i];
}
int main() {
MyIntStack a(10);
a.push(10);
a.push(20);
MyIntStack b = a;
b.push(30);
int n;
a.pop(n);
cout << "스택 a에서 팝한 값 " << n << endl;
b.pop(n);
cout << "스택 b에서 팝한 값 " << n << endl;
}
4. 설명
5번과 다른점은 생성자의서 int형 변수를 하나 입력받아서 그만큼 배열을 동적 생성하고 또한 클래스 변수간의 "="를 사용
하기 위한 MyIntStack( MyIntStack& s); 생성자와 소멸자가 추가되었습니다.
MyIntStack( MyIntStack& s);의서는 깊은 복사를 하여서 정확하게 복사가 되도록 구현하였습니다.
소멸자에서는 동적으로 생성하였던 배열 p를 해제하여 줍니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 5장 8번 (0) | 2019.04.07 |
---|---|
명품 C++ programming 실습문제 5장 7번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 5번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 4번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 3번 (0) | 2019.04.07 |