关于c++中运算符重载
通俗的讲,运算符重载就是把运算符赋予新的功能,比如说 + 有整数相加 浮点数相加的功能,但是没有复数相加的功能,这时我们通过运算符重载,使得 + 具有复数相加的功能,这就叫做运算符重载,本质上, 运算符重载是函数的重载。
重载运算符使具有特殊名称的函数, 形式如下:
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++中运算符重载相关推荐
- C++中运算符重载需要遵循的规则
一.C++中运算符重载需要遵循的规则 1.并不是所有的运算符都可以重载.能够重载的运算符包括: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^ ...
- c++中运算符重载方式中你易遗漏的小细节
运算符重载函数相当于类来说有两种存在方式: 1.重载为类的成员函数. 2.重载为类的友元函数. 重载为类的成员函数. 如果把运算符重载为类的成员函数,则该函数么须通过对象调用,该对象就是运算符的其中一 ...
- c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)
运算符重载注意 重载的运算符要易读 内置的数据类型的表达式的运算符是不可以改变的 不要重载&& 和 | | 运算符 =,[]和->运算符只能通过成员函数进行重载 << ...
- 【C++面向对象】C++中运算符重载的两种方式
我们知道在C++中可以通过重载运算符的方式,使类实现类似于基本类型的运算符操作,如+.-.*./等等.本文介绍这种重载运算符的两种方法. 我们先自定义一个类,来作为本次研究的对象: class Int ...
- c++中 运算符重载 const 函数
概要 本篇文章主要内容是关于运算符重载,然后在最后提了一下 const修饰函数时的状况.后面会补上一个日期类的定义. 文章目录 概要 赋值运算符的重载 = 号的重载 i++ 和 ++i 前置与后置++ ...
- C++中运算符重载的方法
**#include<iostream> using namespace std; class Complex{ public:Complex(){real=0;imag=0;}Compl ...
- [YTU]_2384 ( 矩形类中运算符重载【C++】)
题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...
- [YTU]_2384( 矩形类中运算符重载【C++】)
定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动.两个矩形相加的规则 ...
- python 运算符重载_零基础小白Python入门必看:面向对象之典型魔术方法
魔术方法 查看类的魔术方法 class A: passdir(A) # 可以得到类所有公有成员复制代码 输出结果如下 ['__class__', '__delattr__', '__dict__', ...
最新文章
- 根据两点间的经纬度计算距离
- jvm性能调优 - 20G1垃圾回收器应该如何设置参数
- OO实现ALV TABLE 七:ALV的选择功能
- C++字符串操作函数
- 在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)
- rnqoj-28-合唱队形-最长上升子序列
- 【路径规划】基于matlab GUI改进的迪杰斯特拉算法路径规划【含Matlab源码 1031期】
- PHP获取grpc请求时间,Go gRPC进阶-超时设置(六)
- 文件夹内失效 .htaccess_辽宁本溪内支撑盲管实业
- 基于STM32的NRF24L01模块一对一的问题记录
- LINUX udhcpc命令
- 色彩空间与色彩深度。详细分析相机中sRGB/AdobeRGB、RAW/JPG到底该怎么选
- LM317稳压芯片在工程中的应用
- DITHER抖动算法
- 机器视觉怎么和plc通讯
- WGS84(GPS)、火星坐标系(GCJ02)、百度地图(BD09)坐标系转换案例教程(附转换工具下载)
- 手把手搭建SSM框架
- Oracle 体系结构(27)—— Oracle 的数据字典之(一):数据字典概述
- 锐薄绝杀 满血出击 荣耀首款游戏本27日零点首销!
- 夜雨,心雪,思海...
热门文章
- Vmware中安装Ubuntu的步骤
- 【Linux】一步一步学Linux——mktemp命令(263)
- 【Linux】一步一步学Linux——dir命令(了解)(25)
- 【SSL】SSL工作原理
- 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
- 字符串常量前面的L的作用
- c语言定义小数无穷小,OC中常用的数学函数以及浮点处理函数
- Ubuntu安装 AndroidStudio
- pytorch 1.7.x训练保存的模型在1.4低版本无法加载
- Ubantu16.04安装显卡驱动遇到的坑