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를 해제하여 줍니다.

 

+ Recent posts