C++ primer plus第六版课后编程题答案12.4


 

Stack.cpp

#include <iostream>
using namespace std;
typedef unsigned long Item;
class Stack{
private:
	enum{MAX=10};
	Item *pitems;
	int size;
	int top;
public:
	Stack(int n=MAX)
	{
		pitems=new Item[MAX];
		top=0;//从0开始
		size=0;
	}
	Stack(const Stack &st)
	{
		//Stack(st.size);//委托构造,因为长度不同
		//Item *p=pitems;
		pitems=new Item[st.size];
		top=0;//从0开始
		size=0;
		for(int i=0;i<st.size;i++)
		{
		  pitems[i]=st.pitems[i];
		  size++;
		  top++;
		}
		//size=st.size;
		//top=st.top;
	}
	~Stack()
	{
	 delete []pitems;
	}
	bool isEmpty()
	{
		return top==0;
	}
	bool isFull()
	{
		return top==MAX;
	}
	bool push(const Item &it)
	{
		if(isFull())
			cout<<"error! Stack is full!"<<endl;
		else
		{
			pitems[top++]=it;
			size++;
			return true;
		}
		return false;
	}
	bool pop(Item &item)
	{
		if(isEmpty())
		  cout<<"error! Stack is empty!"<<endl;
		else
		{
			item=pitems[top--];
			size--;
			return true;
		}
		return false;
	}
	Stack &operator=(const Stack &st)
	{
		return Stack(st);//委托构造
	}
	friend ostream&operator<<(ostream &os,const Stack &st)//方便检测
	{
		os<<"This Stack is:"<<endl;
		int len=st.top-1;
		while(len!=-1)//从top开始呈现
		{
			cout<<st.pitems[len]<<endl;
			len--;
		}
		//cout<<endl;
		return os;
	}



};;

main124.cpp

#include <iostream>
#include "Stack.cpp"
using namespace std;
void main124()
{
	Stack s;
	Item it[20]={0};
	for(int i=0;i<11;i++)
	{
		it[i]=i+1;
		s.push(it[i]);
	}
	//s.push(it[10]);
	//s.pop(it[0]);
	cout<<s;
	Stack s1(s);
	cout<<"s1="<<s1;
	Stack s2=s;
	cout<<s;
	cin.get();

}

 

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注