c++語言並不要求遞增和遞減運算子必須是類的成員,但是因為它們改變的正好是所操作物件的狀態,所以建議將其設定為成員函式。(但下面的**為了練習,還是分別採用成員函式和全域性函式的方式實現)
業餘實現**:
1 #include2using
namespace
std;
3class
test
12void
display()
1316
public:17
//前置++
18 test & operator++()
1924
//後置++
25 test operator++(int)26
32private:33
inta;
34int
b;35
};36
//前置--
37 test & operator--(test &obj)
3843
44//
後置--
45 test operator--(test &obj,int)46
52int
main()
53
note:
後置版本接受乙個額外的引數(不被使用)int型別的引數(必須是int型別的)。當我們使用後置運算子時,編譯器為這個形參提供乙個值為0的實參。儘管從語法上說後置函式可以使用這個額外的形參,但在實際過程中通常不會這樣做。這個形參的唯一作用就是區分前置和後置版本的函式,而不是真的要在實現後置版本是參與運算。因為前置和後置版本的遞增或者遞減函式原型必須加以乙個特殊的區分,c++語言選擇增加乙個佔位引數實現後置版本。
如果我們想要通過函式的方式呼叫後置版本,則必須為它的整形引數傳遞乙個值。
eg:a.operator++(0);//呼叫後置版本,經測試,不用0也行,只要可以轉換成int的任意數。
a.operator++();//呼叫前置版本
專業軟體工程師實現方法:
1 #include2using
namespace
std;
3class
test
12void
display()
1316
public:17
//前置++
18 test & operator++()
1924
//後置++
25 test operator++(int)26
31private:32
inta;
33int
b;34
};35
//前置--
36 test & operator--(test &obj)
3742
43//
後置--
44 test operator--(test &obj,int)45
50int
main()
51
同樣的思路在==和!=中也會用到(善於利用現有資源)^_^。
c 過載後置 和
c 語言並不要求遞增和遞減運算子必須是類的成員,但是因為它們改變的正好是所操作物件的狀態,所以建議將其設定為成員函式。但下面的 為了練習,還是分別採用成員函式和全域性函式的方式實現 業餘實現 1 include2 using namespace std 3class test 12void disp...
前置 和後置 過載
1 前置 過載時沒有引數 而後置 過載時有引數。不會使用其引數,僅僅是區分用。可以理解為前置 後面有引數了,所以不需要引數 i 對應 operator i 對應 operator int 2 前置 需要返回引用 因為過載自加運算子後可以返回物件的引用,以方便在表示式中連續使用。而後置 返回的不是引用...
過載 前置 與後置
過載 前置 與後置 不同於普通的雙目運算子 自增自減運算子 在過載的時候需要額外留意區分是前置式還是後置式。現行的處理方法是,作為成員函式的 前置 不接受任何引數,而後置 接受乙個int型別的引數,儘管沒什麼實際用途,但是卻為編譯器確定過載物件提供了幫助。除了區分的時候需要注意,他們的行為也是有所區...