C++学习之重载运算符1
C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们。
先来个代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
编译将提示一个错误:
--------------------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++重载运算符;以下使用运算符重载:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
好了。编译一下,没有问题。这就是最简单的运算符重载。