Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

小狼
Lv 7
小狼 asked in 電腦與網際網路程式設計 · 1 decade ago

關於Stack中一些C 語法的問題

Error_code Stack :: push(const Stack_entry &item)

{

Error_code outcome = success;

if(count >= maxstack)

outcome = overflow;

else

entry[count++] = item;

return outcome;

}

Error_code Stack :: pop()

{

Error_code outcome = success;

if(count==0)

outcome = underflow;

else

--count;

return outcome;

}

Error_code Stack :: top(Stack_entry &item)const

{

Error_code outcome = success;

if(count==0)

outcome = underflow;

else

item = entry[count-1];

return outcome;

}

Stack :: Stack()

{

count=0;

}

我想問的是:

1.那個Error_code、Stack_entry是c++內建的型態,還是自訂的型態?

2.那個寫在push參數中的const與寫在top參數括弧外的const有什麼不同?

1 Answer

Rating
  • ?
    Lv 7
    1 decade ago
    Favorite Answer

    我想Error_code和Stack_entry應不是C++裡內建的型態.因俺從未聽說過.不過俺可能是個井底之蛙.你既然已有Stack的*.cpp檔的內容.那你應有Stack的*.cpp檔吧?若有的話請到所以*.cpp有#include的檔案裡找找Error_code和Stack_entry.應該找的到他們的定義.

    P.S. Error_code, success, underflow, 和overflow應在同一*.h檔裡.

    Error_code Stack :: push(const Stack_entry &item)

    這個Stack的成員函式是以pass by reference的方法來傳其參數.因pass by reference比較省時省空間.但是因這成員函式照理來講並不會(也不應該)更改item裡的值.所以在宣告item這參數時加上const.表示在這成員函式裡不會(也不能)更改item裡的值.所以如果你在這成員函式裡加上

    item = entry[count]

    這行的話那在編譯的時候會出錯.因為你在宣告item這參數時已用const告訴C++在這成員函式裡item絕不會變.但item = entry[cout]卻會更改item.所以會出錯.寫程式不能出爾反爾喔.一般來講在寫成員函式時若此參數在函式裡並不會被更改的話最好在參數宣告時加上const比較好.是個寫程式的好習慣.

    Error_code Stack :: top(Stack_entry &item) const

    這個Stack的成員函式

    1. 主要回傳值是success或underflow.

    2. 用pass by reference的方法回傳在堆疊頂端的物.

    如果堆疊是空的話那就回傳underflow. 如果堆疊不是空的話那就回傳success並把堆疊頂端的物拷貝進item.

    在這過程中並無更改任何Stack裡的成員變數對不對?只有參考而沒更改.所以在成員函式宣告的尾端加個const.來告訴C++這成員變數不會(也不能)更改任何Stack裡的成員變數.所以如果你在這成員函式裡加上

    count--

    這行的話那在編譯的時候會出錯.因為你在宣告這成員函式時已用const告訴C++在這成員函式絕不會更改Stack裡的任何一個成員變數.但count--卻會更改count.(count是Stack裡的成員變數)所以會出錯.寫程式要說一是一說二是二喔. 一般來講在寫成員函式時若此成員函式並不會更改其型態裡任何一個成員變數時最好在成員函式宣告的尾端加上const比較好.是個寫程式的好習慣.

    懂不懂?不懂請再問.

    Source(s): Myself
Still have questions? Get your answers by asking now.