2014년 11월 14일 금요일

c++ >> << 연산자 재정의를 이용한 스택 .


#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

댓글 없음:

댓글 쓰기