在头文件中使用类变量时的误解
Misunderstanding in use of class variables from a header file
struct TodoItem
{
std::string todo;
};
const int MAX_STACK_SIZE = 5;
class TodoStackArray
{
public:
TodoStackArray(); //confusion here<---
bool isEmpty();
bool isFull();
void push(std::string todoItem);
void pop();
TodoItem* peek();
/* for grading purposes we need these following methods */
int getStackTop() { return stackTop; }
TodoItem** getStack() { return stack; }
private:
int stackTop;
TodoItem* stack[MAX_STACK_SIZE];
};
上面的是当前赋值的一些声明和头文件中的一个类。我们的任务是使用这个头文件实现一个堆栈程序。然而,我对头文件中的TodoStackArray()
的目的有点困惑。这应该是一个基构造函数吗?我要用它做什么吗??
我知道这有点具体情况,但鉴于堆栈数组是STL,我想你可能都能提供一些见解。谢谢!
如果你想看看我对这个头文件做了什么…
TodoStackArray::TodoStackArray() //This, unsurprisingly, produces an error.
{
stackTop = -1;
stack[stackTop];
}
bool TodoStackArray::isEmpty()
{
return (stackTop == -1);
}
TodoItem* TodoStackArray::peek()
{
if(stackTop ==-1)
{
cout<< "Stack empty, cannot peak."<<endl;
}
else
{
return(stack[stackTop]);
}
}
bool TodoStackArray::isFull()
{
return(stackTop == 4);
}
void TodoStackArray::push(std::string todoItem)
{
if(stackTop >= 5)
{
cout<<"Stack full, cannot add new todo item."<<endl;
}
else
{
stack[stackTop++];
stack[stackTop]->todo = todoItem;
}
}
void TodoStackArray::pop()
{
if(stackTop == -1)
{
cout<<"Stack empty, cannot pop an item."<<endl;
}
else
{
stackTop--;
}
}
同样,要明确的是,我们没有提供驱动软件。他们将从他们自己的东西进行评估,所以我们必须编写自己的驱动软件来测试我们的功能。因此没有任何Main实现。
是的,TodoStackArray::TodoStackArray()
确实是你的类的默认构造函数。
你应该对它做什么,就像对任何默认构造函数一样:
如果我创建一个新的
TodoStackArray
,类成员应该如何初始化 ?
答案取决于你的类在初始状态下应该是什么样子。
在您的情况下,"默认情况下"堆栈为空。将stackTop
设置为-1并不是一个坏主意,并且您的实现的其余部分与此一致(stackTop == -1
显然意味着"空堆栈")。
stack[stackTop];
你认为这句话的目的是什么?读取数组中的值是负下标,我们都知道这种事情不会有好结果。
构造函数是用来初始化数据的。这里你正在读取一些你没有初始化的东西在一个不存在的索引处。这没什么意义,不是吗?:)删掉这一行,你就能继续写下去了。下面是使用成员初始化列表(被认为更好)的等效实现:
TodoStackArray::TodoStackArray() : stackTop(-1)
{
// notice: no body required here
}
玩得开心!
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 从静态成员函数访问私有非静态类变量 - C++
- 静态类变量的多重定义
- 使用 WindowSetup 类变量获取错误
- 将文本文件读入类变量 - c++
- 在头文件中使用类变量时的误解