⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b_12_2.cpp

📁 C++应用教程原码,里面包含该书中有十三章内容的代码,详细具体
💻 CPP
字号:
#include "stdafx.h"
#include <iostream>
#include <string>
#include<iomanip>
using namespace std;

class stackErr {
public:
    stackErr(string i)
		:message(i){ }
	virtual void print()
	{	cout << message <<endl;
	}
protected:
	string message;
};
class pushOnFull : public stackErr{
public:
	pushOnFull(string i,int j)
		:stackErr(i),value(j){};
	int getValue()
	{  return value; }
	virtual void print()
	{	cout << endl<<"试图压入"<<value<<"失败,原因是"<<message <<endl;
	}
private:
	int value;
};
class popOnEmpty : public stackErr{
public:
	popOnEmpty(string i)
		:stackErr(i){};
};
class creatStackErr : public stackErr{
public:
	creatStackErr(string i)
		:stackErr(i){};
};

template <class Type>
class Stack {
public:
Stack(int size);
~Stack()
	  { delete [] stack;}
	  void push(Type i);
	  Type pop();
private:
	  int tos,length;
	  Type *stack;
};
template <class Type>
Stack <Type>::Stack(int size)
{  stack = new Type[size];
   if (!stack)
     throw creatStackErr("对不起,无法创建栈!");
   length = size;
   tos = 0;
}
template <class Type>
void Stack <Type>::push(Type i)
{  if (tos == length)
     throw pushOnFull("栈已经满了!",i);
   cout <<setw(5)<<i;
   stack[tos++]=i;
}
template <class Type>
Type Stack <Type>::pop()
{  if (tos == 0)
     throw popOnEmpty("栈已经空了!");
   return stack[--tos];
}
void main()
try
{ Stack <int> a(8);
  cout << "依次压入栈内的数:"<<endl;
  for (int i=0;i<9;i++)
	  a.push(i);
  cout << endl<<"依次弹出栈外的数:"<<endl;
  for (int i=0;i<8;i++)
	  cout << setw(5)<< a.pop();

}
catch (pushOnFull fullErr)
{ fullErr.print(); 
  cin.get(); //等待结束,以便调测程序,可以删除
}
catch (popOnEmpty emptyErr)
{ emptyErr.print(); 
    cin.get(); //等待结束,以便调测程序,可以删除
}
catch (creatStackErr creatErr)
{ creatErr.print(); 
    cin.get(); //等待结束,以便调测程序,可以删除
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -