C++学习之重载运算符一

C++学习之重载运算符1

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:CCDEMOdemo1demo.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

好了。编译一下,没有问题。这就是最简单的运算符重载。

相关内容推荐