// @topic T060820 Stack of integers v3
// @brief Stack class declaration with overloaded assignment operator

#ifndef STACK_H_INCLUDED_
#define STACK_H_INCLUDED_

#include <iostream>

class Stack {
    static const int DEFAULT_CAPACITY = 1024;
    int* stack_memory;
    int capacity;
    int top_pos;
public:
    // constructors/destructor
    Stack();
    Stack(int initial_capacity);
    Stack(Stack const& other); // copy constructor
    ~Stack(); // destructor

    // overloaded operators
//private: // do this to disable the = operator
    Stack& operator=(Stack const& other);

public:
    // stack operations
    void push(int value);
    void pop();
    int top() const;
    int& top();
    int size() const;
};// class Stack

#endif //STACK_H_INCLUDED_