1、考慮下面的場景:有乙個person類,內部有個age欄位,對外提供字首式和字尾式,把年齡加1。
2、字首式與字尾式都沒有右運算元,也就是說沒有形參,需要區分字首式和字尾式,對於字尾式中增加乙個形參。因為這個形參在方法內並不使用,可以省略形參名。
3、字首式和字尾式是操作符過載,本質上是方法,和getname()一樣。
4、字首式:
1 person& person::operator ++()2
5、字尾式:
1const person person::operator ++(int)2
二者區別:
1、因為字首式與字尾式操作符相同,都不需要形參,為了使用過載,對於字尾式增加乙個形參。由於方法不使用形參,省略形參名。
2、字首式返回引用,字尾式返回const物件。為什麼?
字首式表達的意思是:先加1,再返回當前物件,很好理解。
字尾式表達的意思是:獲取舊值,當前物件加1,返回舊值。字尾式建立乙個區域性物件,返回區域性物件,但是為什麼返回const物件呢?
如果返回不是const物件,考慮下面的情況:p++++;程式設計師期望對p加2,但實際上呢?第乙個++返回乙個區域性物件,第二個++是對區域性物件加1,而不是對原物件p再次加1,這與程式設計師的期望不一致,為了解決這個問題,讓字尾式返回const物件。(注:字首式可以++++p)
3、考慮效率,對於自定義型別,字尾式效率差很多,涉及到區域性物件的構造析構,還有返回型別時臨時物件的構造析構。對於基本型別,字首式與字尾式差別不大,但是為了一致性考慮和**復用,字尾式往往呼叫字首式,也就是說字尾式多了一次方法呼叫,效率差一點。因此,在字首式與字尾式等價的情況下,使用字首式。
中綴式 字首式 字尾式 轉換
time limit 1000ms memory limit 65536kb submit statistic discuss problem description 小明在學習了資料結構之後,突然想起了以前沒有解決的算術表示式轉化成字尾式的問題,今天他想解決一下。因為有了資料結構的基礎小明很快就解...
中綴式轉字首式 轉字尾式
1 從左向右讀取字元,新建陣列suffix用來儲存字尾表示式 2 如果遇到 入棧,繼續讀取。3 如果遇到 將棧頂元素依次出棧存到suffix中,直到棧頂元素為 此時將棧頂元素出棧,繼續讀取。4 如果遇到運算子,將其與棧頂元素進行比較,如果該運算子優先順序小於等於棧頂元素,則將棧頂元素出棧,存到suf...
字首 波蘭式 中綴 字尾表示式 逆波蘭式
中綴表示式 中綴表示式就是常見的運算表示式,如 3 4 5 6 字尾表示式 字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後 比如 3 4 5 6 與字首表示式類似,只是順序是從左至右 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它...