Итак, у меня есть стек, созданный, как показано ниже. Переменная top должна представлять текущий индекс или «верхний индекс». Поэтому, проведя некоторое тестирование, конструктор делает, вызывается, а значение верхнего равно -1, в то время как программа по-прежнему запускает метод-конструктор. Однако, после создания объекта стека, и тестирование, чтобы увидеть, что значение верхней, я получаю сверху быть 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;
}
'isFull' и' isEmpty' ничего не возвращают, если их тесты 'if' терпят неудачу. – Barmar