从头文件

时间:2016-09-29 07:08:00

标签: c++ class header-files

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--;
    }
}

另外,要明确的是,我们没有提供驱动程序软件。他们将从他们自己的东西评估,所以我们必须编写自己的驱动程序软件来测试我们的功能。因此缺乏任何主要实施。

1 个答案:

答案 0 :(得分:1)

是的,TodoStackArray::TodoStackArray()确实是您的类'默认构造函数。

你应该怎么做,就像任何默认构造函数一样:

  

如果我创建新的TodoStackArray,该类成员应如何初始化

答案取决于你的班级在初始状态下应该是什么样子。

在您的情况下,“默认情况下”堆栈为空。将stackTop设置为-1并不是一个坏主意,其余的实现与此一致(stackTop == -1显然意味着“空堆栈”)。

构造函数中发生的奇怪之处是:

stack[stackTop];

根据你的说法,这条线的目的是什么?你在负数索引中读取数组中的值,我们都知道这种事情永远不会结束。

构造函数用于初始化数据。在这里,您正在阅读未在不存在的索引处初始化的内容。没有多大意义,是吗? :)

摆脱这条线,你应该能够继续前进。这是使用member initializer list的等效实现(被认为更好):

TodoStackArray::TodoStackArray() : stackTop(-1)
{
    // notice: no body required here
}

玩得开心!