重载操作符

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

  1. 重载操作符1.1 限制重载操作符具有以下限制:
  (1) 只有C++预定义的操作符集中的操作符才可以被重载;
  (2) 对于内置类型的操作符,它的预定义不能被改变,应不能为内置类型重载操作符,如,不能改变int型的操作符+的含义;
  (3) 也不能为内置的数据类型定义其它的操作符;
  (4) 只能重载类类型或枚举类型的操作符;
  (5) 重载操作符不能改变它们的操作符优先级;
  (6) 重载操作符不能改变操作数的个数;
  (7) 除了对( )操作符外,对其他重载操作符提供缺省实参都是非法的;
  1.2 注意点(1) 后果载操操作符首先要确定它的返回值是左值,还是右值,如果是左值最返回引用,如果是右值那就直接返回值;
  (2) +号等这样的操作符没有对象可以容纳改变后值,对于这样的情况最好返回数值,否则只能要操作符体内创建临时对象用于容纳改变后的值,如果在堆中创建临时对象返回指针或者引用,在操作符函数体外还需要释放它,如果返回的对象而不是引用或者指针,那么效率是比较低的。如果返回的是数值,最好在该类的构造函数中增加对该类型数值的转换函数,如:返回值是int类型,那么最好有一个int类型作为参数的构造函数。
  (3) 在增量运算符中,放上一个整数形参,就是后增量运行符,它是值返回,对于前增量没有形参,而且是引用返回,示例:
  class Test
  {
   public:
   Test(x=3){ m_value = x}
   Test &operator ++(); //前增量
   Test &operator ++(int);//后增量
  private:
   Int m_value:
  };
  Test &Test::operator ++()
  {
   m_value ++; //先增量
   return *this; //返回当前对象
  }
  Test Test::operator ++(int)
  {
   Test tmp(*this); //创建临时对象
   m_value ++; //再增量
   return temp; //返回临时对象
  }
  (4) 因为强制转换是针对基本数据类型的,所以对类类型的转换需自定义;
  (5) 转换运行符重载声明形式:operator 类型名();它没有返回类型,因为类型名就代表了它的返回类型,所以返回类型显得多余。
  (6) 一般来说,转换运算符与转换构造函数(即带一个参数的构造函数)是互逆的,如有了构造函数Test(int),那么最好有一个转换运算符int()。这样就不必提供对象参数重载运算符了,如Test a1(1);Test a2(2); Test a3; a3 = a1+a2;就不需要重载+号操作符了,因为对于a1+a2的运算,系统可能会先找有没有定义针对Test的+号操作符,如果没有,它就会找有没有针对Test类转换函数参数类型的+号操作符(因为可以将+号运行结果的类型通过转换函数转换为Test对象),因为Test类有个int类型的参数,对于int类型有+操作符,所以a1+a2真正执行的是Test(int(a1) + int(a2));即Test(3);
  (7) 对于转换运算符,还有一个需要注意的地方就是,如果A类中有以B为参数的转换函数(构造函数),那B中不能有A的转换运算符,不然就存在转换的二义性,如:
  class A{A(B&){…}}; class B{ operator A(){…}};那么以下语句就会有问题:
  B b; A(b);//A(b)有就可能是A的构造函数,也可以是B的转换运算符

【C++】操作符重载 注意:操作符重载可以当做==“自定义类的运算”== 1 为什么需要操作符重载? 对于基础的变量,int等,不需要重载就知道如何做,但是对于自定义类,就无法进行运算,比如复数类。 2 操作符重载总结 1)操作符重载本质上是一个函数,可以采用 友元函数或者成员函数实现。但是采用这两种函数传递参数、实现代码、应用场合均不同。 全局函数成员函数的比较: 全局函数中不传递this指针,成员函数默认传递this指针,因此成员函数可以少一个参数; 成员函数可以访问私有变量,全局函数需要转化为友元函数才可以。 2)操 阅读详情

相关推荐

高分六号GF-6 WFV数据处理全流程:从原始数据解压到经纬度投影转换

本文详细解析了高分六号GF-6 WFV遥感数据的完整处理流程。从原始数据解压分块结构理解入手,指导如何安装ENVI国产卫星支持工具进行自动拼接,并重点阐述了利用RPC模型进行正射校正以消除几何畸变,以及将UTM投影转换为地理经纬度坐标的关键步骤。文章旨在帮助用户高效地将原始卫星数据转化为可直接用于农业监测、生态环境分析等领域的标准地理空间图像。

weixin_29047919的博客 161

test a3可以作为C语言程序的标识符,C语言基本选择题及参考答案.docx

计算机程序设计基础(C语言)单项选择练习题、基本概念C语言程序是由C构成的。A)—些可执行语言B)main函数C)函数D)包含文件中的第一个函数( A)是构成C语言程序的基本单位。A函数B过程C、子程序D子例程C语言程序从C开始执行。A)程序中第一条可执行语句???B)程序中第一个函数4.?C)程序中的main函数???????D)4.C语言程序从main()函数开始执行,所以这个函数要写在 _D...

weixin_39713219的博客 605

信号处理仿真:自适应信号处理_(8).自适应信道均衡

在无线通信系统中,信道的多径效应和时变特性会导致信号的失真,从而影响通信质量。自适应信道均衡技术通过实时调整均衡器的参数,以补偿信道失真,提高信号的质量和可靠性。本节将详细介绍自适应信道均衡的原理、算法和实现方法,并通过具体的仿真例子来说明其应用。

2401_87715305的博客 1017

2018.5.23(c++面向对象--复制构造函数)

复制构造函数 #include<iostream> #include<cstdio> using namespace std; class Test { public: double real,image; public: Test ()//无参构造函数 { }; Test (double n)//含有一个参数的构造函数 ...

来自大白的渴望 219

C++操作符重载

简要介绍了各种操作符重载方式实现

shadow_xwl的博客 5734

【C++重载操作符转换】重载操作符的定义

在C++中,操作符重载Operator Overloading)是一项强大的特性,它允许开发者为自定义类型(如类或结构体)重新定义内置操作符的行为。通过重载操作符,可以使自定义类型的对象表现得像内置类型一样自然,从而提升代码的可读性和可维护性。然而,操作符重载也是一把双刃剑,如果使用不当,可能会导致代码难以理解和调试。

byte轻骑兵的技术小窝 2053

C++:重载操作符 & 赋值操作符重载需要注意的问题

一、操作符重载 1.什么是操作符重载 就是把一些操作符通过关键字operator,组装成一个函数,关键字operator后面接需要重载操作符符号 2.为什么需要重载操作符? (1)简单、方便,比起封装一个函数,使用operator比较形象直观 (2)可以提高代码的可读性 (3)为了处理自定义类型和内置类型之间的运算 3.操作符重载的格式 函数的返回类型 operator 操...

dangzhangjing97的博客 2423

C++操作符重载(不能被重载操作符

C++中的运算符: 名称 运算符 算数运算符 +、-、/、%、++、– 位操作运算符 &、 逻辑运算符 !、&&、 比较运算符 <、>、<=、>=、==、!= 赋值运算符 =、+=、-=、*=、/=、%=、 其

ZWE7616175的博客 8338

操作符重载

文章目录操作符重载规则单目运算符++(左)++(右)双目操作符重载+运算符+=运算符 操作符重载规则 不能被重载操作符 符号 符号举例 . Peron.name .* Person.*name=*(Person.name) :: 作用域操作符 ?: 条件操作符 操作符重载不能改变操作数的个数 操作符重载不改变运算顺序(依然先算 * / 后算+ -) 操作符重...

zzyczzyc的博客 1923

操作符重载总结

一、重载的基本规则 1.重载操作符的形参数目应操作符的操作数数目相同。 重载操作符作为类的成员函数,隐含一个*this作为函数的第一个函数 2.重载后,优先级、结合性、操作数目不变。但是不能保证求值顺序 求值顺序是指:在优先级、结合性相同的情况下,先求哪个 3.不能创建新的操作符 4.重载操作符必须至少有一个类类型或枚举类型 5.不可重载操作符:(

幸福在路上 1800

C++ 操作符重载

操作符介绍从微机原理中我们就知道了精简指令集计算机RISC,Reduced Instruction Set Computer中的指令分为操作符和操作数。其中操作按照参数个数分为:一元操作符和二元操作符。发展到C++等高级语言时,操作符又可以根据功能分为:算术、关系、位操作、逻辑运算、成员运算、函数调用、索引(下标)、递增、递减操作符。为了理解操作符重载,简单说一些重要的操作符。²        一

rendaduiyan的专栏 4108

c++操作符重载

容器对象list和vector使用时遇到find函数报错,那么问题的最终解决方案在操作符重载,这里就顺便将操作符重载的相关内容都详细介绍一遍,并给出实例代码

河西~石头 1675

C# 操作符重载对象详解

操作符重载是 C# 中一项强大的特性,它为自定义类型的操作提供了更多的灵活性和可读性。通过合理地重载操作符,我们可以让自定义类型像基本数据类型一样,方便地使用各种操作符进行运算和比较等操作。在使用操作符重载时,需要严格遵循相关的规则和注意事项,以确保代码的正确性和可维护性。随着对 C# 编程的深入学习,我们可以在更多的场景中应用操作符重载,提升代码的质量和开发效率。

zsnandzmn的博客 1335

5-操作符重载

操作符重载

创造价值 1459

java 操作符 重载_操作符重载

类中使用操作符,希望明了易懂,可以通过重载操作符,使自定义类使用操作符像一般类使用一样简洁。如何自定义操作符?其实操作符重载相当于函数的重载(代码中标注)。下面以“+”的重载为例子。#ifndef STUDENT_H#define STUDENT_H#include using namespace std;class student{public:student();student(int nu...

weixin_32017139的博客 878

C# 操作符重载

      操作符是C#中用于定义类的实例对象间表达式操作的一种成员。和索引器类似,操作符仍然是对方法实现的一种逻辑界面抽象,也就是说在编译成的IL中间语言代码中,操作符仍然是以方法的形式调用的。在类内定义操作符成员又叫操作符重载。C#中的重载操作符共有三种:一元操作符,二元操作符和转换操作符。并不是所有的操作符都可以重载,三种操作符都有相应的可重载操作符集,列于下表: 一元操作符

niehoude的专栏 1094

C++类—重载操作符

重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号。如: [cpp] view plaincopy Sales_item operator+(const Sales_item &,const Sales_item &);   除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针

xietingcandice的专栏 2578

操作符重载问题

操作符重载问题 1.为什么要使用重载操作符呢? 因为普通操作符只能识别内置类型,而对于自定义的类它并不能识别,我们也可以通过重新写一个函数来实现这些操作符的功能,但是这样的做法太麻烦,且代码可读性低.而使用重载操作符,可以令程序更自然、更直观,而滥用操作符重载会使得类难以理解,在实践中很少发生明显的操作符重载滥用。但有些程序员会定义operator+来执行减法操作,当一个重载操作符不明确时,给

lemon 945

重载操作符详解

重载操作符是具有特殊名称的函数,保留字operator后接续定义的操作符符号,像任意其他函数一样,重载操作符具有返回类型和形参表。 (1)       重载操作符必须具有一个类类型的操作数 (2)       优先级和结合性是固定的 (3)       不在具有短路求值特性 重载的参数个数 重载一元操作符如果作为成员函数就没有形参,如果作为非成员函数就有一个形参,类似的,重载二元操作符

Phoenix_FuliMa 1799
上一篇: 做WEB C#  C/S
下一篇: c++中函数重载
militala
博客等级 码龄18年 44粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值