#include <iostream>
#include <cstring>
using namespace std;
#define MAXSIZE 20
//定义栈,使用模板类
template<typename T>
class Stack
{
private:
int top = -1;
T data[MAXSIZE]; //数据域
T Data;
public:
Stack() {}
Stack(T d):Data(d){} //类内声明
~Stack(){} //类内声明
//栈的插入
void push();
//栈的遍历
void show();
//栈的删除
void pop();
};
//内外定义时,用到类名时,必须显性调用,此时需要使用一个模板,重新定义模板即可
//入栈
template<typename T>
void Stack<T>::push()
{
string s;
cout << "请输入要插入得数据:";
getchar();
getline(cin,s);
Data = s;
//1,判断栈是否为满
if(this->top == MAXSIZE-1)
{
cout << "已满" << endl;
return;
}
//入栈:先加后压
this->data[++this->top] = Data;
return;
}
//内外定义时,用到类名时,必须显性调用,此时需要使用一个模板,重新定义模板即可
//遍历
template<typename T>
void Stack<T>::show()
{
for(int i = 0;i <=this->top;i++)
{
cout << "入栈的数据为:";
cout << this->data[i] << endl;
}
cout << endl;
}
//出栈
template<typename T>
void Stack<T>::pop()
{
if(this->top == -1)
{
cout << "栈空,删除失败" << endl;
return;
}
cout << "出栈的元素是:";
cout << this->data[this->top--] << endl;
return;
}
int main()
{
//Stack<int>s1(1314);
Stack<string>s2("abcd");
while(1)
{
puts("***************************");
cout << "1,栈的插入" << endl;
cout << "2,栈的删除" << endl;
cout << "3,栈的遍历" << endl;
cout << "0,退出程序" << endl;
puts("***************************");
int num = 0;
cout << "请输入你的选择:";
cin >> num;
switch(num)
{
case 1:
{
s2.push();
}
break;
case 2:
s2.pop();
break;
case 3:
s2.show();
break;
case 0:
return 0;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
}
return 0;
}
C++中的多态以及C++11补充特性
于 2023-04-24 19:33:36 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)