gokhanxyz 0 Newbie Poster
template <class T>
class Node{

	private:

		T data;
		Node<T> *ptr;

	public:

		void set_data(T parametre){

			data = parametre;

		}

		void set_ptr(Node<T> *ptr){

			this->ptr = ptr;

		}

		Node<T> * get_ptr(void){

			return ptr;

		}


		T get_data(void){

			return data;

		}

};


template <class Type>
class Stack{

	private:
	
		Node<Type> *head;

	public:
	
		Stack(void){

			head = 0;

		}

		Stack<Type> & push(Type parametre){

			if(head == 0){

				head = new Node<Type>;

				head->set_data(parametre);

				head->set_ptr(0);				

			}

			
			else{

				Node<Type> *new_ptr = new Node<Type>;
				
				new_ptr->set_data(parametre);

				new_ptr->set_ptr(head);

				head = new_ptr;				

			}

			return *this;

		}



		Type pull(void){

			Type pulled_value = head->get_data();

			Node<Type> *tmp_ptr = head;

			head = head->get_ptr();

			delete [] tmp_ptr;

			return pulled_value;

		}



		
		void print(void){

			Node<Type> *tracer = head;

			while(tracer != NULL){

				cout<<tracer->get_data()<<endl;

				tracer = tracer->get_ptr();

			}

		}

};

I tried to implement a stack, but i am not sure whether it fits into the concepts of OOP. Could you please inform me about the good and bad points of the code?