📄 b_12_2.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 + -