通俗的讲,运算符重载就是把运算符赋予新的功能,比如说 + 有整数相加 浮点数相加的功能,但是没有复数相加的功能,这时我们通过运算符重载,使得 + 具有复数相加的功能,这就叫做运算符重载,本质上, 运算符重载是函数的重载。

重载运算符使具有特殊名称的函数, 形式如下:

1 返回类型 operator运算符号(形式参数列表)
2 {
3 函数体
4 }

1 operator后接需要重载的运算符, 成为运算符函数。

2 运算符函数的函数名就是“ operator运算符号”  //operator+  是函数名

下面通过设计一个复数类实现 + 的重载

1 #include <iostream>
2 using namespace std;
3 class complex //复数类
4 {
5 public:
6 complex(double r=0.0,double i=0.0)//构造函数
{real=r; imag=i;
}
7 complex operator +(complex &c2); //重载+运算符
8 complex operator -(complex &c2); //重载-运算符
9 void display()
10 {
11 cout<<real<<"+"<<imag<<"i"<<endl;
12 }
13 private:
14 double real; //实部
15 double imag; //虚部
16 };

complex complex::operator +(complex &c2)
18 { complex c;
20 c.real=c2.real+real;
21 c.imag=c2.imag+imag;
22 return c;
23 }
24 complex complex::operator -(complex &c2)
25 { complex c;
27 c.real=real-c2.real; //顺序不能颠倒
28 c.imag=imag-c2.imag;
29 return c;
30 }
31 int main()
32 { complex c1(1,2),c2(3,4),c3;
34 c3=c2+c1; c3.display(); //输出4+6i
36 c3=c2-c1; c3.display(); //输出2+2i
38 return 0;
39 }

只有类的普通成员函数才有this指针 类的有元函数 静态成员函数都是没有this指针的

当运算符重载为友元函数时, 运算符函数的形式参数的个数和运算符规定的运算对象个数一致 一般我们也是采用这种方式

形式如下:

class 类名{ //类体
……
//友元声明
friend 返回类型 operator 运算符号(形式参数列表);
};
返回类型 operator 运算符号(形式参数列表)
{
函数体
}

还是以 + - 运算符为例

1 #include <iostream>
2 using namespace std;
3 class complex //复数类
4 {
5 public:
6 complex(double r=0.0,double i=0.0) {real=r; imag=i;}//构造函数
7 friend complex operator +(const complex &c1,const complex &c2);
//重载+运算符
8 friend complex operator -(const complex &c1,const complex &c2);
//重载-运算符
9 void display()
10 { cout<<real<<"+"<<imag<<"i"<<endl; }
11 private:
12 double real; //实部
13 double imag; //虚部
14 };
15 complex operator +(const complex &c1,const complex &c2)
16 { complex c3;
17 c3.real=c1.real+c2.real;
18 c3.imag=c1.imag+c2.imag;
19 return c3;
20 }
21 complex operator -(const complex &c1,const complex &c2)
22 { complex c3;
23 c3.real=c1.real-c2.real;
24 c3.imag=c1.imag-c2.imag;
25 return c3;
26 }
27 int main()
28 { complex c1(1,2),c2(3,4),c3;
29 c3=c2+c1; c3.display(); //输出4+6i
30 c3=c2-c1; c3.display(); //输出2+2i
31 return 0;
32 }

重载运算符的规则
►( 1) C++绝大部分的运算符可以重载, 不能重载的运算符有:. .* :: ?: sizeof
►( 2) 不能改变运算符的优先级、 结合型和运算对象数目。
►( 3) 运算符重载函数不能使用默认参数。
►( 4) 重载运算符必须具有一个类对象( 或类对象的引用) 的参数,不能全部是C++的内置数据类型。

►( 5) 一般若运算结果作为左值则返回类型为引用类型; 若运算结果要作为右值, 则返回对象。

►( 6) 重载运算符的功能应该与原来的功能一致。

转载于:https://www.cnblogs.com/tiantiantian-dianzi/p/5625438.html

关于c++中运算符重载相关推荐

  1. C++中运算符重载需要遵循的规则

    一.C++中运算符重载需要遵循的规则 1.并不是所有的运算符都可以重载.能够重载的运算符包括: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^ ...

  2. c++中运算符重载方式中你易遗漏的小细节

    运算符重载函数相当于类来说有两种存在方式: 1.重载为类的成员函数. 2.重载为类的友元函数. 重载为类的成员函数. 如果把运算符重载为类的成员函数,则该函数么须通过对象调用,该对象就是运算符的其中一 ...

  3. c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)

    运算符重载注意 重载的运算符要易读 内置的数据类型的表达式的运算符是不可以改变的 不要重载&& 和 | | 运算符 =,[]和->运算符只能通过成员函数进行重载 << ...

  4. 【C++面向对象】C++中运算符重载的两种方式

    我们知道在C++中可以通过重载运算符的方式,使类实现类似于基本类型的运算符操作,如+.-.*./等等.本文介绍这种重载运算符的两种方法. 我们先自定义一个类,来作为本次研究的对象: class Int ...

  5. c++中 运算符重载 const 函数

    概要 本篇文章主要内容是关于运算符重载,然后在最后提了一下 const修饰函数时的状况.后面会补上一个日期类的定义. 文章目录 概要 赋值运算符的重载 = 号的重载 i++ 和 ++i 前置与后置++ ...

  6. C++中运算符重载的方法

    **#include<iostream> using namespace std; class Complex{ public:Complex(){real=0;imag=0;}Compl ...

  7. [YTU]_2384 ( 矩形类中运算符重载【C++】)

    题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...

  8. [YTU]_2384( 矩形类中运算符重载【C++】)

    定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动.两个矩形相加的规则 ...

  9. python 运算符重载_零基础小白Python入门必看:面向对象之典型魔术方法

    魔术方法 查看类的魔术方法 class A: passdir(A) # 可以得到类所有公有成员复制代码 输出结果如下 ['__class__', '__delattr__', '__dict__', ...

最新文章

  1. 根据两点间的经纬度计算距离
  2. jvm性能调优 - 20G1垃圾回收器应该如何设置参数
  3. OO实现ALV TABLE 七:ALV的选择功能
  4. C++字符串操作函数
  5. 在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)
  6. rnqoj-28-合唱队形-最长上升子序列
  7. 【路径规划】基于matlab GUI改进的迪杰斯特拉算法路径规划【含Matlab源码 1031期】
  8. PHP获取grpc请求时间,Go gRPC进阶-超时设置(六)
  9. 文件夹内失效 .htaccess_辽宁本溪内支撑盲管实业
  10. 基于STM32的NRF24L01模块一对一的问题记录
  11. LINUX udhcpc命令
  12. 色彩空间与色彩深度。详细分析相机中sRGB/AdobeRGB、RAW/JPG到底该怎么选
  13. LM317稳压芯片在工程中的应用
  14. DITHER抖动算法
  15. 机器视觉怎么和plc通讯
  16. WGS84(GPS)、火星坐标系(GCJ02)、百度地图(BD09)坐标系转换案例教程(附转换工具下载)
  17. 手把手搭建SSM框架
  18. Oracle 体系结构(27)—— Oracle 的数据字典之(一):数据字典概述
  19. 锐薄绝杀 满血出击 荣耀首款游戏本27日零点首销!
  20. 夜雨,心雪,思海...

热门文章

  1. Vmware中安装Ubuntu的步骤
  2. 【Linux】一步一步学Linux——mktemp命令(263)
  3. 【Linux】一步一步学Linux——dir命令(了解)(25)
  4. 【SSL】SSL工作原理
  5. 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
  6. 字符串常量前面的L的作用
  7. c语言定义小数无穷小,OC中常用的数学函数以及浮点处理函数
  8. Ubuntu安装 AndroidStudio
  9. pytorch 1.7.x训练保存的模型在1.4低版本无法加载
  10. Ubantu16.04安装显卡驱动遇到的坑