当我使用构造函数定义运行以下程序时,执行最后一个弹出函数后输出为-1。
#define SIZE 100
class stack
{
private:
int tos;
int arr[SIZE];
public:
stack(){tos=0;}
int push(int);
int pop();
};
int stack::push(int i)
{
if(tos==SIZE)
{cout<<"stack is full\n";}
arr[tos]=i;
tos++;
return 0;
}
int stack::pop ()
{
if(tos==0)
{cout<<"stack is empty\n";}
tos--;
return arr[tos];
}
int main()
{
stack stack1;
stack1.push(1);
stack1.push(2);
stack1.push(3);
cout<<stack1.pop();
cout<<stack1.pop();
cout<<stack1.pop();
cout<<stack1.pop();
return 0;
}
但是当我尝试使用静态初始化运行时,同一个程序会给出垃圾值。为什么?
#define SIZE 100
class stack
{
private:
static int tos;
int arr[SIZE];
public:
int push(int);
int pop();
};
int stack :: tos = 0;
int stack::push(int i)
{
if(tos==SIZE)
{cout<<"stack is full\n";}
arr[tos]=i;
tos++;
return 0;
}
int stack::pop ()
{
if(tos==0)
{cout<<"stack is empty\n";}
tos--;
return arr[tos];
}
int main()
{
stack stack1;
stack1.push(1);
stack1.push(2);
stack1.push(3);
cout<<stack1.pop();
cout<<stack1.pop();
cout<<stack1.pop();
cout<<stack1.pop();
return 0;
}