运算符重载的概念和原理

一、运算符重载的需求

C++预定义的“+、-、 * 、/、%、 ^ 、&、~、!、|、 = 、<< >>、!= ”等运算符,只能用于基本数据类型(整型、实型、字符型、逻辑型)的常量或变量进行运算,不能用于对象之间的运算。

在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的。有时会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。

二、运算符重载

运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。

运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象。

同一个运算符,对不同类型的操作数,所发生的行为不同。

三、运算符重载的形式

运算符重载的实质是函数重载

可以重载为普通函数,也可以重载为成员函数

把含运算符的表达式转换成对运算符函数的调用。

把运算符的操作数转换成运算符函数的参数。

运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。

运算符函数的格式:

返回值类型 operator 运算符(形参表)
{
……
}

程序示例分析:

#include<iostream>
using namespace std;
class Complex
{
public:
double real, imag;
Complex(double r = 0.0, double i = 0.0) :real(r), imag(i) { }
Complex operator-(const Complex& c);
};
Complex operator+(const Complex& a, const Complex& b)
{
return Complex(a.real + b.real, a.imag + b.imag); //返回一个临时对象
}
Complex Complex::operator-(const Complex& c)
{
return Complex(real - c.real, imag - c.imag); //返回一个临时对象
}
int main()
{
Complex a(, ), b(, ), c;
c = a + b; //等价于c=operator+(a,b);
cout << c.real << "," << c.imag << endl;
cout << (a - b).real << "," << (a - b).imag << endl; //a-b等价于a.operator-(b)
return ;
}

输出结果:

,
,

Tips:

重载为成员函数时,参数个数为运算符目数减一。

重载为普通函数时,参数个数为运算符目数。

“类名(构造函数实参表)”这种写法表示生成一个临时对象。

最新文章

  1. android获取手机信息2
  2. Linux Kernel Schduler History And Centos7.2&#39;s Kernel Resource Analysis
  3. POJ1401 - Factorial
  4. html5之拖放简单效果
  5. React Native底|顶部导航使用小技巧
  6. C++学习-8
  7. python-数据类型之题型
  8. vue富文本编辑器
  9. JDBC测试计划-连接mysql
  10. MVC的SignalR例子
  11. 排错-lr回放错误Vuser&#160;failed&#160;to&#160;initialize&#160;extensi...解决方法
  12. MySQL(九)插入、更新和删除
  13. Centos7防火墙开放8080端口
  14. 在mac下配置Andriod环境 包括eclipse和andriod studio
  15. php 去除数组中指定的值
  16. python基础之字符串格式化
  17. C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比
  18. 如何使用vsphere client 克隆虚拟机
  19. 【hash】【P5079】P5079 Tweetuzki 爱伊图
  20. 轻量ORM-SqlRepoEx (十)SqlRepoEx Nuget包下载说明

热门文章

  1. 为什么maven没有.m2文件
  2. 解决Office安装错误代码1024:安装程序无法打开注册表项UNKNOWN\Components\
  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:表单帮助文本
  4. AngularJS 官方启动文档
  5. java并发初探ConcurrentHashMap
  6. CNN反向传播算法公式
  7. 第1节 storm编程:4、storm环境安装以及storm编程模型介绍
  8. English-Names
  9. boost::timer demo
  10. POJ 2718 Smallest Difference dfs枚举两个数差最小