— 1 —
重載的形式
a++ // 后置自增運算符++a // 前置自增運算符b-- // 后置自減運算符--b // 前置自減運算符
為了區(qū)分所重載的是「前置」運算符還是「后置」運算符,C++規(guī)定:
「前置」運算符作為一元運算符重載,重載為成員函數(shù)的形式如下:
// 前置自增運算符的重載函數(shù),函數(shù)參數(shù)是空T & operator++();// 前置自減運算符的重載函數(shù),函數(shù)參數(shù)是空T & operator--();
「后置」運算符作為二元運算符重載,多寫一個沒用的參數(shù),重載為成員函數(shù)的形式如下:
// 后置自增運算符的重載函數(shù),多一個沒用的參數(shù)T operator++(int);// 后置自減運算符的重載函數(shù),多一個沒用的參數(shù)T operator--(int);
— 2 —
返回值的討論
| 前置運算符重載的成員函數(shù) | 后置運算符重載的成員函數(shù) |
|---|---|
| T & operator++(); | T operator++(int); |
| T & operator--(); | T operator--(int); |
注意到區(qū)別了嗎?那么問題來了:
為什么「前置」運算符返回的是引用 & ?
為什么「后置」運算符返回的是普通的對象(臨時對象)?
前置運算符的特性
int a = 0// (++a) = 5;// 可以拆解成:// 1. a = a + 1;// 2. a = 5;(++a) = 5; // 前置++
后置運算符的特性
而后置運算符,是不能作為左值的,也就是 (a++) = 5; 是不成立的,所以后置運算符的重載函數(shù)的返回值就是普通的對象。
— 3 —
重載函數(shù)的編寫
int main(){CDemo d(10);cout << d++ << ","; // 等價于 d.operator++(0);cout << d << ",";cout << ++d << ","; // 等價于 d.operator++();cout << d << ",";cout << d-- << ","; // 等價于 d.operator--(0);cout << d << ",";cout << --d << ","; // 等價于 d.operator--();cout << d << endl;return 0;}
10,11,12,1212,11,10,10
— 4 —
性能比較
-
先要產(chǎn)生一個臨時對象來保存未自增或自減前的對象; -
接著成員變量自增或自減; -
最后返回修改前的對象(臨時對象);
-
成員變量自增或自減; -
返回對象引用;
小林coding
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!





