#include <iostream>
#include <cstdlib>
using namespace std;
class Stack {
public:
Stack(int num);
~Stack();
void push(int number);
int pop();
int top();
int getSize();
bool full();
bool empty();
friend const Stack operator + (const Stack& s1, const Stack& s2);
friend ostream& operator << (ostream& out, const Stack& stk);
private:
int size; // size of the stack
int* arr; // stack
int top_pri;
};
Stack::Stack(int num) {
top_pri = -1;
size = num;
arr = new int[num];
Stack::~Stack() {
/*
Deconstructor for class Stack.
You do not need to modify this function.
*/
delete[] arr;
arr = NULL;
}
void Stack::push(int number) {
if (!full())
{
top_pri += 1;
arr[top_pri] = number;
}
const Stack operator + (const Stack& s1, const Stack& s2) {
int a = s1.size + s2.size;
Stack s3 = Stack(a);
if (s1.top_pri == -1 && s2.top_pri!= -1)
{
for (int i = 0; i < s2.top_pri+1; i++)
{
s3.arr[i] = s2.arr[i];
}
s3.top_pri = s2.top_pri;
return s3;
}
else if (s2.top_pri == -1 && s1.top_pri != -1)
{
for (int i = 0; i < s1.top_pri+1; i++)
{
s3.arr[i] = s1.arr[i];
}
s3.top_pri = s2.top_pri;
return s3;
}
else if ((s2.top_pri == -1) && (s1.top_pri == -1))
{
return s3;
}
else if ((s2.top_pri != -1) && (s1.top_pri != -1))
{
for (int i = 0; i < s2.top_pri+1; i++)
{
s3.arr[i] = s2.arr[i];
}
for (int i = s2.top_pri+1,j = s1.top_pri; i < (s2.top_pri+1)+(s1.top_pri+1); i++,j--)
{
s3.arr[i] = s1.arr[j];
}
s3.top_pri = s2.top_pri + s1.top_pri + 1;
return s3;
}
大概就是模拟栈的先进后出,但是我将s1,s2中的数赋值给s3后就会报错
没有拷贝构造函数和operator=