【发布时间】:2014-06-21 01:35:59
【问题描述】:
我正在学习 C++,我们得到了一个使用类模板和指针制作堆栈类的练习。我还没有完全理解堆栈或指针的实现,所以我试了一下并制作了这个类:
template <class T>
class Stack_Class {
public:
T* stack;
int item_quantity;
T* First_item;
int Max_quantity;
Stack_Class(int value);
~Stack_Class();
bool Add(T value);
T Pop();
int GetMax_Quantity();
bool Full();
bool Empty();
};
template <class T>
Stack_Class<T>::Stack_Class(int value) {
if (value > 0) {
stack = new T[value];
First_item = stack;
item_quantity = 0;
Max_quantity = value;
}
}
template <class T>
Stack_Class<T>::~Stack_Class() {
if (First_item) {
delete First_item;
}
}
template<class T>
bool Stack_Class<T>::Add(T num) {
if (item_quantity <Max_quantity) {
*stack = num;
stack++;
item_quantity++;
return true;
}
else return false;
}
template<class T>
T Stack_Class<T>::Pop() {
if (!Empty()) {
item_quantity--;
return stack[item_quantity];
}
return NULL;
}
template<class T>
bool Stack_Class<T>::Empty() {
return (item_quantity == 0);
}
template <class T>
int Stack_Class<T>::GetMax_Quantity() {
return Max_quantity;
}
主要课程是:
#include <iostream>
#include "Stack_Class.h"
void main() {
Stack_Class<int> intStack(3);
intStack.Add(1);
intStack.Add(2);
intStack.Add(3);
int count = intStack.GetMax_Quantity();
for (int i = 0; i < count; i++) {
std::cout << "Pop No: " << i << " - Elemento: " << intStack.Pop() << std::endl;
}
}
虽然结果是我得到了所有随机数,而不是我在 intStack 中给出的随机数。添加,所以我的问题是我在这里正确地实现了指针?
【问题讨论】:
-
stack = new T[value];-> 你的意思是那个还是构造函数?因为你不使用 delete[] 那么等等。 -
@keyser:说出确切的疑问会更有用。
-
@LaszloPapp 是的,不过在这种情况下我会完全撤回它们:)
-
您在索引 (
stack[item_quantity]) 和移动指针 (stack++) 之间混合使用,这可能是您困惑的根源。