編寫CDemo類,使得下面程序能夠正常運行ios
int main(){ CDemo d(5); cout << (d++) << ","; cout << d << ","; cout << (++d) << ","; cout << d << endl; cout << (d--) << ","; cout << d << ","; cout << (--d) << ","; cout << d << endl; return 0; }
5,6,7,7 7,6,5,5
自增++
自減--
運算符有前置和後置之分,爲了區分,後置運算符多一個參數int。
前置運算符:做爲一元運算符重載,能夠重載爲成員函數也能夠重載爲全局函數(返回值究竟是不是引用?)。
後置運算符:做爲二元運算符重載,多寫一個參數int,可是沒有實際意義。能夠重載爲成員函數也能夠重載爲全局函數。返回值不是引用!不是引用!不是引用!函數
強調:後置運算符多一個參數int,返回值不是引用。
爲了cout
能夠正常輸出,重載類型強制轉換運算符int做爲成員函數。this
類型強制轉換運算符重載spa
不能寫返回值類型 實際上其返回值類型爲類型強制轉換運算符表明的類型
運算符重載的注意事項code
.
.*
::
?:
sizeof
()
[]
->
>>
和流插入<<
運算符只能重載爲全局函數,第一個參數ostream
對象必須爲引用。#include<iostream> using namespace std; class CDemo{ public: CDemo(int num = 0):n(num){} CDemo operator++(); //前置++,成員函數 CDemo operator++(int); //後置++,成員函數 friend CDemo operator--(CDemo&); //前置--,友元函數 friend CDemo operator--(CDemo&, int); //後置--,友元函數 operator int(){ //強制類型轉換運算符重載 return n; } // friend ostream& operator<<(ostream& co, const CDemo& d); // friend istream& operator>>(istream& ci, CDemo& d); private: int n; }; //前置++ CDemo CDemo::operator++(){ n++; return *this; } //後置++ CDemo CDemo::operator++(int){ CDemo temp(*this); n++; return temp; } //前置-- CDemo operator--(CDemo& d){ d.n--; return d; } //後置-- CDemo operator--(CDemo& d, int){ CDemo temp(d); d.n--; return temp; } //ostream& operator<<(ostream& co, const CDemo& d){ // co << d.n; // return co; //} //istream& operator>>(istream& ci, CDemo& d){ // ci >> d.n; // return ci; //} int main(){ CDemo d(5); cout << (d++) << ","; cout << d << ","; cout << (++d) << ","; cout << d << endl; cout << (d--) << ","; cout << d << ","; cout << (--d) << ","; cout << d << endl; return 0; }