完成了以下功能的封装
目录
代码实现:
#include <iostream>
#include <cstring>
using namespace std;
class Static
{
private:
int *arr; //动态分配栈
int top; //指向栈顶元素
int capacity; //记录栈的最大容量
public:
//有参构造函数
Static(int size) : top(-1), capacity(size)
{
arr = new int[capacity];
cout<<"有参构造"<<endl;
}
//析构函数
~Static()
{
delete[] arr;
cout<<"析构函数"<<endl;
}
//赋值给容器适配器
Static & operator=(const Static &brr);
//访问栈顶元素
int _top();
//栈判空
bool _empty();
//返回容纳的元素数
int _size();
//向栈顶插入元素
void _push(int value);
//删除栈顶元素
void _pop();
};
Static &Static::operator=(const Static &brr)
{
if(this != &brr)
{
delete[] arr; //释放掉原本栈的内存空间
capacity = brr.capacity;
top = brr.top;
arr = new int[capacity]; //重新给栈申请和brr大小一样的空间
for(int i = 0; i <= top; i++)
{
arr[i] = brr.arr[i];
}
}
return *this;
}
int Static::_top()
{
if(_empty()) //判断栈是否为空
{
cout<<"栈为空"<<endl;
return -1;
}
return arr[top];
}
bool Static::_empty()
{
return top == -1;
}
int Static::_size()
{
return capacity;
}
void Static::_push(int value)
{
if(top >= capacity)
{
cout<<"栈满无法插入"<<endl;
return ;
}
arr[++top] = value;
cout<<value<<"插入成功"<<endl;
}
void Static::_pop()
{
if(_empty())
{
cout<<"栈为空"<<endl;
return ;
}
top--; //直接将栈顶减一
cout<<"删除栈顶元素成功"<<endl;
}
int main()
{
Static s1(10); //分配了大小为10的栈空间
s1._push(5); //插入5
s1._push(2); //插入2
s1._push(0); //插入0
cout<<"*************************************"<<endl;
cout<<"栈顶元素是"<<s1._top()<<endl; //访问栈顶元素
cout<<"栈能容纳最大个数是"<<s1._size()<<endl; //返回最大能容纳个数
cout<<"*************************************"<<endl;
s1._pop(); //删除栈顶元素
cout<<"栈顶元素是"<<s1._top()<<endl; //访问栈顶元素
return 0;
}