#include <iostream>
using namespace std;
class MyIntStack{
int *p;
int size;
int tos;
public:
MyIntStack(int size){//매개생성자 인라인함수로 넣기
this->p = new int[size];
this->size = size;
this->tos = -1;}//인덱스 리턴//매개생성자
MyIntStack(const MyIntStack &s){//복사 생성자
int len = s.size;
this->p = new int[len];
this->size = len;
this->tos = s.tos;
for (int i = 0; i <= tos; i++)
this->p[i] = s.p[i];
}//복사 생성자
~MyIntStack(){delete [] p;}
bool push(int n){
if (tos >= 9) return false;
p[++tos] = n;
return true;}//정수 n을 스택에 푸시한다.스택 꽉차있으면 false,아니면 true리턴
bool pop(int &n){
if (tos < 0) return false;
n = p[tos--];
return true;}//스택에 탑에 있는값을 n에 팝한다.
};
int main() {
MyIntStack a(10);
a.push(10);
a.push(20);
MyIntStack b =a; //복사 생성
b.push(30);
int n;
a.pop(n); //스택a팝
cout << "스택 a에서 팝한 값 " << n << endl;
b.pop(n);//스택 b팝
cout << "스택 b에서 팝한 값 " << n << endl;
return 0;
}