C++除可重載函數之後,還允許定義已有的運算符,這樣通過運算符重載可像處理數據使用它們。
先來個代碼
1 #include<iostream> 2 using namespace std; 3 4 class num 5 { 6 public: 7 num(){n=1;} 8 ~num(){} 9 int get() const{return n;} 10 void set(int x){n=x;} 11 private: 12 int n; 13 }; 14 15 int main() 16 { 17 num i; 18 cout<<i.get()<<endl; 19 i++; 20 return 0; 21 } View Code編譯將提示一個錯誤:
--------------------Configuration: demo1 - Win32 Debug--------------------
Compiling...
demo.cpp
E:\CCDEMO\demo1\demo.cpp(19) : error C2676: binary '++' : 'class num' does not define this operator or a conversion to a type acceptable to the predefined operator 此處提示沒有該類沒有重載++這個運算符;
執行 cl.exe 時出錯.
demo1.exe - 1 error(s), 0 warning(s)
將代碼處:i++ 注釋,編譯即成功;如何解決以上問題,我們可以使用一函數解決,看以下代碼:
#include<iostream> using namespace std; class num { public: num(){n=1;} ~num(){} int get() const{return n;} void set(int x){n=x;} void add(){++n;} private: int n; }; int main() { num i; cout<<i.get()<<endl; i.add(); cout<<i.get()<<endl; //i++; return 0; }
以上能解決問題,但還沒有現實我們所說的C++重載運算符;以下使用運算符重載:
1 #include<iostream> 2 using namespace std; 3 4 class num 5 { 6 public: 7 num(){n=1;} 8 ~num(){} 9 int get() const{return n;} 10 void set(int x){n=x;} 11 void add(){++n;} 12 void operator++(){++n;} //此處使用了重載運算符 13 private: 14 int n; 15 }; 16 17 int main() 18 { 19 num i; 20 cout<<i.get()<<endl; 21 i.add(); 22 cout<<i.get()<<endl; 23 ++i;//這裡使用++運算符 24 cout<<i.get()<<endl; 25 return 0; 26 } View Code好了。編譯一下,沒有問題。這就是最簡單的運算符重載。