C++ Primer筆記12_運算符重載_遞增遞減運算符_成員訪問運算符
阿新 • • 發佈:2017-06-04
primer -a rime scott ipp 變量 函數 ott 解決
上述代碼比較簡單,為了方便演示。在我們的Person中僅僅對Person類中的age成員變量進行了遞增遞減操作。
1.遞增遞減運算符
C++語言並不要求遞增遞減運算符必須是類的成員。可是由於他們改變的正好是所操作對象的狀態。所以建議設定為成員函數。
對於遞增與遞減運算符來說,有前置與後置兩個版本號,因此。我們應該為類定義兩個版本號的遞增與遞減運算符。
問題來了。程序是怎樣區分前置和後置呢?由於都是++和-- 為了解決問題,後置版本號的遞增遞減運算符接受一個額外的(不被使用)int類型的形參。當我們使用後置運算符時,編譯器為這個形參提供一個值為0的實參。
這個形參唯一的作用就是區分前置和後置運算符函數。
由於不會用到int形參,所以無須為其命名。
樣例例如以下:
Person & Person::operator++()//前置版本號的++ { age++;//only ++ age return *this; } Person & Person::operator--()//前置版本號的-- { age--; return *this; } Person & Person::operator++(int)//後置版本號的++ { Person &p = *this; age++; return p; } Person & Person::operator--(int)//後置版本號的-- { Person &p = *this; age--; return p; }
int main() { Person p1(20, "SCOTT"); Person p2(10, "Kate"); cout << p1 << endl; p1--; cout << p1 << endl; return 0; }
上述代碼比較簡單,為了方便演示。在我們的Person中僅僅對Person類中的age成員變量進行了遞增遞減操作。
執行結果:
Init Person
Init Person
p.age: 20, p.name: SCOTT
p.age: 19, p.name: SCOTT
~Person name: 0x8dcc048 age: 10
~Person name: 0x8dcc020 age: 19
2.成員訪問運算符
在叠代器類以及智能指針類中經常見到解引用運算符(*) 與 箭頭運算符(->) 。
我們也能夠自己定義這兩個運算符。
樣例:
Person * Person::operator->() { return this; }
Person & Person::operator*() { return *this; }
int main() { Person p1(20, "SCOTT"); Person p2(10, "Kate"); cout << p1->getName() << endl; cout << (*p2).getName() << endl; return 0; }執行結果:
Init Person
Init Person
SCOTT
Kate
~Person name: 0x89d7048 age: 10
~Person name: 0x89d7020 age: 20
C++ Primer筆記12_運算符重載_遞增遞減運算符_成員訪問運算符