2011-11-16 80 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

程序看到只有棧頂被設置爲一個常量,不需要在內部進行更改。

相關問題