首先,什么是运算符重载?

C++里运算符重载主要有两种方法。一是通过类的成员函数进行重载,二是通过类的友元函数进行重载。

下面以简单的复数类complex为例:

下面是通过类的成员函数进行运算符的重载。

 #include <iostream>
#include <string>
using namespace std; /*运算符重载可以通过类的成员函数和友元函数两种途径来实现*/ class complex
{
public:
complex(int x=,int y=)
{
real = x;
image = y;
}
~complex(){}
void show()
{
if(image >= )
cout<<real<<"+"<<image<<"i"<<endl;
else
cout<<real<<image<<"i"<<endl;
}
/*重载双目运算符*/
complex operator +(const complex& a);
complex operator -(const complex& a);
/*重载单目运算符*/
complex operator ++(); //原本为一个参数,但是少一个参数就没有参数了。
complex operator ++(int);
private:
int real,image;
}; /*注意:以成员函数的形式来重载运算符,此时参数要比原本的参数少一个,因为在非静态成员函数中有this指针访问该对象*/
/*但是如果是用友元函数来实现运算符重载,那么运算符函数的参数个数就是操作数的个数*/ complex complex::operator +(const complex& a)
{
return complex(real+a.real,image+a.image);
} complex complex::operator -(const complex& a)
{
complex c;
c.real = real - a.real;
c.image = image - a.image;
return c;
} /*默认为不带参数为前置运算符,带参数int为后置运算符重载*/
complex complex::operator ++() //前置++
{
complex c;
real++;
image++;
c.real = real;
c.image = image;
return c;
} complex complex::operator ++(int) //后置++
{
complex c;
c.real = real;
c.image = image;
real++;
image++;
return c;
} /*之前对为什么可以直接调用complex类型的对象的私有变量表示疑惑,我个人理解是可以在complex的成员函数中调用任何complex类的对象的私有变量*/ int main()
{
complex a1(,);
complex a2(,);
complex c1,c2,c3,c4;
c1 = a1 + a2;
c2 = a1 - a2;
c3 = ++c1;
c4 = c2++;
c1.show();
c2.show();
c3.show();
c4.show();
return ;
}

也可以通过友元函数来进行重载。比较懒,所以直接截MOOC上的图了。

通过以上的例子,简单的说明了运算符重载,帮助理解运算符的重载。

不过得注意,运算符重载有一些要求:

如果有错误,欢迎批评指正!

最新文章

  1. 基于clahe的图像去雾
  2. java基础-002
  3. Node.js中的模块化
  4. Android开发需要注意的坑
  5. 17.1.1 How to Set Up Replication
  6. 通过C++修改系统时间代码
  7. Vim 第一天
  8. UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作
  9. handsontable 合并单元格
  10. python selenium模拟滑动操作
  11. Java 多线程系列 CountDownLatch
  12. 新装mysql数据库登陆不上去(账号密码正确)
  13. 自学python 2.
  14. Photoshop 基础二 快捷键
  15. Event事件2
  16. jquery 語法
  17. Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 Error:..\FreeRTOS\tasks.c,2806
  18. Linux 中的 tar
  19. 如何让你的网站用上免费的HTTPS
  20. Jacoco覆盖率工具使用调研

热门文章

  1. 学习BM算法
  2. k8s-helm安装
  3. k8s之网络插件flannel及基于Calico的网络策略
  4. Spring MVC 探讨DispatcherServlet
  5. grpc的demo
  6. editormd 富文本编辑器转 html
  7. iOS UIControl 事件的说明(转)
  8. vue runtime报错问题
  9. nuxt项目打包上线之二
  10. uni-app中nvue (weex) 注意事项