重载运算与类型转换

简介: 重载运算与类型转换

14.重载运算与类型转换

14.1基本概念

1.重载的运算符是具有特殊名字的函数,由operator和需要重载的运算符组成的函数名,该函数同样需要返回类型、参数列表和函数体。且参数列表必须包含类成员或对象,我们不能重载只包含内置类型的运算符,因为他们都是编译器已经定义好了的。

2.成员运算符必须参数列表第一个参数是类成员或对象

3.重载运算符的调用:

//一个非成员运算符函数的等价调用

data1 + data2;

operator + (data1 , data2); //类似于普通函数的调用

//一个成员运算符函数的等价调用

data1 + data2;

data1.operator + (data2);

4.因为求值顺序的原因,通常情况下,不应该重载逗号、取地址、逻辑与和逻辑或运算符。

5.重载版本应与内置类型版本在返回类型和操作上一致,避免运算符重载的滥用。

6.赋值(=)、下标([ ])、调用(())、和成员访问箭头(->)运算符必须是成员;符合赋值运算符(如+=、-=)一般来说应该是成员,但不是必须;像++、--、*等会改变对象状态的运算符或者与给定类型密切相关的运算符应该是成员;

其他的运算符一般是非成员。

const对象只能调用const成员函数,否则会报如下错误:

不能将“this”指针从“const Sales_data”转换为“Sales_data &” 1> 转换丢失限

14.2

1.重载输入输出运算符时,为了保持其连续性,通常令其返回一个引用,且输出运算符应尽量减少格式化操作,使用户可以控制输出的细节;输入运算符则必须唏嘘处理输入可能失败的情况,并将其恢复。

2.如果类同时定义了算术运算符和相关的复合赋值运算符,则通常情况下应该使用复合赋值来实现算术运算符。

3.如果某个类在逻辑上有相等性的含义,则该类应该定义operator ==和!=,这两个运算符应该吧工作委托给另外一个,一个负责比较操作,另一个负责调用那个真正工作的运算符。

4.如果存在唯一一种逻辑可靠的<定义,则应该考虑为这个类定义<运算符,如果类同时还包含==,则当且仅当<的定义和==产生的结果一致时(两个对象并且那个都不必另一个小)才定义< 运算符。

5.赋值运算符必须定义为非静态成员,符合赋值运算符通常也应该这样做,且两类运算符都应该返回左侧运算对象的引用。

6.下标运算符必须是成员函数,通常会定义两个版本,一个返回一个普通引用,另一个是类的常量成员且返回常量引用普通重载形式无法区分前置和后置递增递减运算符,所以我们令后置版本接受一个额外的(不被使用的)int类型的形参。因为我们不会用到int形参,所以无须为其命名。

7.箭头运算符必须是类的成员,解引用通常是,但并非必须。

相关文章
|
6月前
|
C++
33 C++ - 可重载的运算符
33 C++ - 可重载的运算符
22 0
|
2月前
|
存储 Java 程序员
强制类型转换运算符的深入解析
在编程中,类型转换是一个常见的操作,它允许我们将一个数据类型转换为另一个数据类型。在某些情况下,编译器可以自动执行这种转换,称为隐式类型转换。但在其他情况下,需要程序员显式地指定转换,这就是所谓的强制类型转换。
8 0
|
2月前
|
C++
C++运算符号重载详解
C++运算符号重载详解
|
3月前
|
自然语言处理 安全 C++
C++ 操作重载与类型转换(一)
C++ 操作重载与类型转换(一)
50 3
|
3月前
|
存储 C++
C++ 操作重载与类型转换(二)
C++ 操作重载与类型转换(二)
43 2
|
8月前
|
安全 程序员 编译器
C++中的四种类型转换运算符
隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。 再者,C风格的强制类型转换统一使用( ),而( )在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、Mac 下的 Command+F)定位关键代码。为了使潜在风险更加细化,使问题追溯更加方便,使书写格式更加规范,C++ 对类型转换进行了分类,并新增了四个关键字来予以支持,它们分别是: 这四个关键字的语
38 0
|
9月前
隐式类型转换 算术转换 操作符的属性
隐式类型转换 算术转换 操作符的属性
33 0
|
10月前
|
存储 安全 编译器
(强制)类型转换方法
(强制)类型转换方法
72 0
3、类型转换(强制转换、自动转换、与或非)
3、类型转换(强制转换、自动转换、与或非)
96 0
3、类型转换(强制转换、自动转换、与或非)