#include
using namespace std;
template
class stack {
private:
int top;
Data* dataArray;
public:
//top -1로 초기화
stack() : top(-1) {
dataArray = new Data[3];
};
//push &참조자를 리턴하는 이유는 중복 호출시 다시 부르는 객체가 자기자신이기 때문.
stack& operator<<(Data data) {
this->dataArray[++top] = data;
return *this;
}
//pop 역시 참조자 리턴 이유는 같음
//참조자를 리턴하지 않을경우 복사 생성자가 불리며(디폴트) 복사 된 객체가 다시 오퍼레이터를 부른다 연속 연산 할때.
stack operator >> (Data &data) {
data = this->dataArray[top--];
return *this;
}
int operator!() {
if (top == -1) {
return true;
}
else {
return false;
}
}
};
//<< push
//>> pop
int main() {
stack stack;
int x = 0, y = 0, z = 0;
((stack << 3) << 5) << 10;
//참조자 리턴의 이유 (리턴된 참조자가 다시 연산자 오퍼레이터를 부른다)
(stack.operator >> (x)) >> y >> z;
cout << x << ' ' << y << ' ' << z << ' ';
cout << endl;
}
결과는 10 5 3
2014년 11월 14일 금요일
c++ >> << 연산자 재정의를 이용한 스택 .
피드 구독하기:
글 (Atom)