11.1 Introduction ●C++语言为了支持基本数据类型数据运算,内置 了多种运算符,并且其中部分已针对操作数类型 的不同进行了重载; °当需要将这些运算符用于用户自定义类型时,用 户可进行运算符重载。 °重载运算符的基本概念、限制,何时选择重载? °如何实现重载?全局vs成员函数 °拷贝构造函数/转换构造函数 °自定义 String类vs标准 string类 0 2018, SEU. All rights reserved. 6
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 6 11.1 Introduction C++语言为了支持基本数据类型数据运算,内置 了多种运算符,并且其中部分已针对操作数类型 的不同进行了重载; 当需要将这些运算符用于用户自定义类型时,用 户可进行运算符重载。 重载运算符的基本概念、限制,何时选择重载? 如何实现重载?全局 vs 成员函数 拷贝构造函数 / 转换构造函数 自定义String类 vs 标准string类
Topics o 11.1 Introduction o 11.2 Fundamentals Restrictions o 11.3 Operator Functions as class Members vs Global Functions o 11.4 Overloading Stream Insertion and Stream Extraction Operators 11.5 Overloading Unary Operators 11.6 Overloading Binary Operators o 11.7 Case Study: Array Class 11.8 Converting between types 11.9 Case Study: String Class 11.10 Standard Library Class string(self study) o 11.11 Overloading + and -(self study) o 11.12 Case Study: A Date Class(self study) 0 2018, SEU. All rights reserved. 7
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 7 Topics 11.1 Introduction 11.2 Fundamentals & Restrictions 11.3 Operator Functions as Class Members vs. Global Functions 11.4 Overloading Stream Insertion and Stream Extraction Operators 11.5 Overloading Unary Operators 11.6 Overloading Binary Operators 11.7 Case Study: Array Class 11.8 Converting between types 11.9 Case Study: String Class 11.10 Standard Library Class string(self study) 11.11 Overloading ++ and ––(self study) 11.12 Case Study: A Date Class(self study)
11.2 Fundamentals Restrictions 需求 目的:提高类代码的可用、可读性 HugeintA. add(HugeIntB)vs HugeintA HugeintB ●提高C++的可扩展性 °特别适合于和数学相关的类 复数类 °大整数类 0 2018, SEU. All rights reserved. 8
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 8 11.2 Fundamentals & Restrictions --- 需求 目的:提高类代码的可用、可读性 HugeintA.add(HugeIntB) vs HugeintA + HugeintB 提高C++的可扩展性 特别适合于和数学相关的类 复数类 大整数类
11.2 Fundamentals Restrictions 语法 °运算符重载只是一种“语法上的方便”,也就是 说它只是另一种函数调用的方式。区别: 定义方式 调用方式 定义重载的运算符(可视为特殊函数)就像定义函数 (全局/成员),区别是该函数的名称是 operator@ 其中 operator是关键词,@是被重载的运算符, 如: Hugelnt operator+(const Hugelnt& a); 0 2018, SEU. All rights reserved. 9
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 9 11.2 Fundamentals & Restrictions --- 语法 运算符重载只是一种“语法上的方便”,也就是 说它只是另一种函数调用的方式。区别: 定义方式 调用方式 定义重载的运算符(可视为特殊函数)就像定义函数 (全局/成员),区别是该函数的名称是 operator@ 其中operator是关键词,@是被重载的运算符, 如: HugeInt operator+(const HugeInt& a);
11.2 Fundamentals Restrictions 语法 °运算符重载只是一种“语法上的方便”,也就是 说它只是另一种函数调用的方式。区别: °定义方式 调用方式 普通函数 °全局函数:函数名(参数列表) °类成员函数:对象函数名(参数列表等 重载的运算符 使用时以表达式形式出现: HugelntA+ HugelntB 0 2018, SEU. All rights reserved. 10
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 10 11.2 Fundamentals & Restrictions --- 语法 运算符重载只是一种“语法上的方便”,也就是 说它只是另一种函数调用的方式。区别: 定义方式 调用方式 普通函数 全局函数: 函数名(参数列表) 类成员函数: 对象.函数名(参数列表)等 重载的运算符 使用时以表达式形式出现: HugeIntA + HugeIntB