为什么我的堆栈对象在创建后会更改默认值?

时间:2014-11-08 17:09:39

标签: c++ class object stack

所以我创建了一个如下所示的堆栈。变量 top 应该代表当前索引,或者#34; top index"。因此,通过进行一些测试,构造函数进行调用,top 的值为 -1,而程序仍在运行构造函数方法。但是,在创建堆栈对象并测试以查看 top 的值是什么之后,我一直是最高的32767.从字面上看,主要做的就是创建一个新的堆栈

 Stack s; //Testing while this is running to see value of top... I get -1
 //Testing here to see value of top... I get 32767

-

如下所示创建堆栈。

 #ifndef __STACK_H_
 #define __STACK_H_

  class Stack{
    int stackSize;
    int top;
    char* items;
  public:
    Stack();
    ~Stack();
    void push(char c);
    char pop();
    bool isFull();
    bool isEmpty();
 };

 #endif

实施如下:

 /* STACK IMPLEMENTATION FILE */

 #include "stack.h"
 #include <iostream>

 using namespace std;

 Stack::Stack(){
    cout << "Ctor is run." << endl;
    stackSize = 10; //Stack Size is 10
    int top = -1; //Currently empty stack
    cout << top << endl;
    items = new char[stackSize];
 }

 Stack::~Stack(){ //Destructor
    delete[] items;
 }

 void Stack::push(char c){ //Push next into stack
    items[++top] = c;
    cout << top << endl;
 }


 char Stack::pop(){ //Pop one from stack
    return items[top--];
 }

 bool Stack::isFull(){ //Checks to see if stack is full
    if (top + 1 == stackSize) return true;
 }

 bool Stack::isEmpty(){ //Checks to see if stack is empty
    if (top == -1) return true;
 }

1 个答案:

答案 0 :(得分:4)

您希望构造函数中的top = 1不是int top = 1。前者分配给成员,后者初始化一个超出构造函数末尾范围的局部变量。