2011-11-16 69 views
1
template <typename T> 
class Stack { 
    private: 
    std::vector<T> elems; // elements 

    public: 
    Stack();    // constructor 
    void push(T const&); // push element 
    void pop();   // pop element 
    T top() const;   // return top element 
}; 

为什么top()是一个常量函数?我认为每个堆栈都应该有它自己的顶层元素,所以访问它是一个非常量的top()函数。我错了吗?为什么Stack :: top()是一个const成员函数?

+1

问题标题与这个问题有什么关系? – aschepler

+0

它从上一个问题陷入困境,我没有注意到要改变它。我现在会改变它。 – w4j3d

+0

[常数成员函数]的可能重复(http://stackoverflow.com/questions/4691332/constant-member-functions) –

回答

5

const!= staticconst表示该函数不会修改任何内部变量和对象的状态。

0

因为它不会更改任何成员变量。

1

A const函数并不意味着结果不依赖于类对象。这意味着调用该函数不会修改该对象。

int main() { 
    Stack<int> a_stack; 
    a_stack.push(5); // modifies a_stack 
    int n = a_stack.top(); // does not modify a_stack 
} 

不需要一个类对象的成员函数与static关键字声明(并且不能const,因为没有对象承诺不修改)。

1

您正在声明一个不会修改类属性的方法;维护堆栈常量

0

程序看到只有栈顶被设置为一个常量,不需要在内部进行更改。

相关问题