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的转换运算符
相关推荐
高分六号GF-6 WFV数据处理全流程:从原始数据解压到经纬度投影转换
本文详细解析了高分六号GF-6 WFV遥感数据的完整处理流程。从原始数据解压与分块结构理解入手,指导如何安装ENVI国产卫星支持工具进行自动拼接,并重点阐述了利用RPC模型进行正射校正以消除几何畸变,以及将UTM投影转换为地理经纬度坐标的关键步骤。文章旨在帮助用户高效地将原始卫星数据转化为可直接用于农业监测、生态环境分析等领域的标准地理空间图像。
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...
信号处理仿真:自适应信号处理_(8).自适应信道均衡
在无线通信系统中,信道的多径效应和时变特性会导致信号的失真,从而影响通信质量。自适应信道均衡技术通过实时调整均衡器的参数,以补偿信道失真,提高信号的质量和可靠性。本节将详细介绍自适应信道均衡的原理、算法和实现方法,并通过具体的仿真例子来说明其应用。
2018.5.23(c++面向对象--复制构造函数)
复制构造函数 #include<iostream> #include<cstdio> using namespace std; class Test { public: double real,image; public: Test ()//无参构造函数 { }; Test (double n)//含有一个参数的构造函数 ...
C++操作符重载
简要介绍了各种操作符的重载方式与实现
【C++重载操作符与转换】重载操作符的定义
在C++中,操作符重载(Operator Overloading)是一项强大的特性,它允许开发者为自定义类型(如类或结构体)重新定义内置操作符的行为。通过重载操作符,可以使自定义类型的对象表现得像内置类型一样自然,从而提升代码的可读性和可维护性。然而,操作符重载也是一把双刃剑,如果使用不当,可能会导致代码难以理解和调试。
C++:重载操作符 & 赋值操作符重载需要注意的问题
一、操作符重载 1.什么是操作符重载 就是把一些操作符通过关键字operator,组装成一个函数,关键字operator后面接需要重载的操作符符号 2.为什么需要重载操作符? (1)简单、方便,比起封装一个函数,使用operator比较形象直观 (2)可以提高代码的可读性 (3)为了处理自定义类型和内置类型之间的运算 3.操作符重载的格式 函数的返回类型 operator 操...
C++操作符重载(不能被重载的操作符)
C++中的运算符: 名称 运算符 算数运算符 +、-、/、%、++、– 位操作运算符 &、 逻辑运算符 !、&&、 比较运算符 <、>、<=、>=、==、!= 赋值运算符 =、+=、-=、*=、/=、%=、 其
操作符重载
文章目录操作符重载规则单目运算符++(左)++(右)双目操作符重载+运算符+=运算符 操作符重载规则 不能被重载的操作符 符号 符号举例 . Peron.name .* Person.*name=*(Person.name) :: 作用域操作符 ?: 条件操作符 操作符重载不能改变操作数的个数 操作符重载不改变运算顺序(依然先算 * / 后算+ -) 操作符重...
操作符重载总结
一、重载的基本规则 1.重载操作符的形参数目应与操作符的操作数数目相同。 重载操作符作为类的成员函数,隐含一个*this作为函数的第一个函数 2.重载后,优先级、结合性、操作数目不变。但是不能保证求值顺序 求值顺序是指:在优先级、结合性相同的情况下,先求哪个 3.不能创建新的操作符 4.重载操作符必须至少有一个类类型或枚举类型 5.不可重载的操作符:(
C++ 操作符重载
操作符介绍从微机原理中我们就知道了精简指令集计算机RISC,Reduced Instruction Set Computer中的指令分为操作符和操作数。其中操作按照参数个数分为:一元操作符和二元操作符。发展到C++等高级语言时,操作符又可以根据功能分为:算术、关系、位操作、逻辑运算、成员运算、函数调用、索引(下标)、递增、递减操作符。为了理解操作符重载,简单说一些重要的操作符。² 一
c++操作符重载
容器对象list和vector使用时遇到find函数报错,那么问题的最终解决方案在操作符重载,这里就顺便将操作符重载的相关内容都详细介绍一遍,并给出实例代码
C# 操作符重载对象详解
操作符重载是 C# 中一项强大的特性,它为自定义类型的操作提供了更多的灵活性和可读性。通过合理地重载操作符,我们可以让自定义类型像基本数据类型一样,方便地使用各种操作符进行运算和比较等操作。在使用操作符重载时,需要严格遵循相关的规则和注意事项,以确保代码的正确性和可维护性。随着对 C# 编程的深入学习,我们可以在更多的场景中应用操作符重载,提升代码的质量和开发效率。
5-操作符重载
操作符重载
java 操作符 重载_操作符重载
类中使用操作符,希望明了易懂,可以通过重载操作符,使自定义类使用操作符像一般类使用一样简洁。如何自定义操作符?其实操作符的重载相当于函数的重载(代码中标注)。下面以“+”的重载为例子。#ifndef STUDENT_H#define STUDENT_H#include using namespace std;class student{public:student();student(int nu...
C# 操作符重载
操作符是C#中用于定义类的实例对象间表达式操作的一种成员。和索引器类似,操作符仍然是对方法实现的一种逻辑界面抽象,也就是说在编译成的IL中间语言代码中,操作符仍然是以方法的形式调用的。在类内定义操作符成员又叫操作符重载。C#中的重载操作符共有三种:一元操作符,二元操作符和转换操作符。并不是所有的操作符都可以重载,三种操作符都有相应的可重载操作符集,列于下表: 一元操作符
C++类—重载操作符
重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号。如: [cpp] view plaincopy Sales_item operator+(const Sales_item &,const Sales_item &); 除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针
操作符重载问题
操作符重载问题 1.为什么要使用重载操作符呢? 因为普通操作符只能识别内置类型,而对于自定义的类它并不能识别,我们也可以通过重新写一个函数来实现这些操作符的功能,但是这样的做法太麻烦,且代码可读性低.而使用重载操作符,可以令程序更自然、更直观,而滥用操作符重载会使得类难以理解,在实践中很少发生明显的操作符重载滥用。但有些程序员会定义operator+来执行减法操作,当一个重载操作符不明确时,给
重载操作符详解
重载操作符是具有特殊名称的函数,保留字operator后接续定义的操作符符号,像任意其他函数一样,重载操作符具有返回类型和形参表。 (1) 重载操作符必须具有一个类类型的操作数 (2) 优先级和结合性是固定的 (3) 不在具有短路求值特性 重载的参数个数 重载一元操作符如果作为成员函数就没有形参,如果作为非成员函数就有一个形参,类似的,重载二元操作符定
161




被折叠的 条评论
为什么被折叠?



