类和对象代码应用实践
类和对象代码应用实践
1. string类型
string的成员变量为指针,因此拷贝构造函数和赋值运算符重载函数都得重写。
1 | class String |
2. 循环队列 Queue
class Queue
{
public:
Queue(int size = 20) //构造函数
{
_pQue = new int[size];
_front = _rear = 0;
_size = size;
}
~Queue() //析构函数
{
delete[] _pQue;
_pQue = nullptr;
}
void addQue(int val)
{
if(full())
{
resize();
}
else
{
_pQue[_rear] = val;
_rear = (_rear + 1) % _size;
}
}
void pop()
{
if(empty())
{
return;
}
_front = (_front + 1) % _size;
}
int top() //获取队头元素
{
return _pQue[_front];
}
bool empty() //判断队列是否为空
{
return _front == _rear;
}
bool full() //判断队列是否为满
{
return (_rear + 1) % _size == _front;
}
Queue(const Queue &src) //拷贝构造函数
{
_size=src._size;
_pQue = new int[src._size];
for(int i=_front ;i!=rear;i=(i+1)%_size)
{
_pQue[i]=src._pQue[i];
}
_front=src._front;
_rear=src._rear;
}
Queue &operator=(const Queue &src) //赋值运算符重载函数
{
if(this==&src) return *this;
delete[] _pQue;
_size=src._size;
_pQue = new int[src._size];
for(int i=_front ;i!=rear;i=(i+1)%_size)
{
_pQue[i]=src._pQue[i];
}
_front=src._front;
_rear=src._rear;
return *this;
}
private:
int _pQue; //申请队列的数组空间,浅拷贝有问题,需要自己实现拷贝构造与赋值
int _front;
int _rear;
int _size;
void resize() //扩容
{
int index = 0;
int pNew = new int[_size 2];
for(int i=_front;i!=_rear;i=(i+1)%_size)
{
pNew[index++] = _pQue[i];
}
delete[] _pQue;
_pQue = pNew;
_front = 0;
_rear = index;
_size = 2;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yolo-zzy的博客!