


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第08讲 函数重载和运算符重载C+ 在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载 是指一个与之前已经在该作用域内 过的函数或方法具有相同名称的 , 但是它们的参数列表与定义实现不相同。当我们调用一个重载函数或重载运算符时,编译器通过把我们所使用的参数类型与定义中的参数类型进行比较,然后选用最合适的。选择最合适的重载函数或重载运算符的过程, 称为重载决策。函数重载在同一个作用域内,可以 几个功能类似的同名函数,但是这些同名函数的参数列表(指参数的个数、类型和顺序)必须不同。下面的实例中,同名函数 print() 被用于输出不同的数据类型:1 #include
2、<iostream>2 using namespace std;34 class printData5 6 public:7 void print(int i)8 9 cout "整数为: " i endl;10 1112 void print(double f)13 14 cout "浮点数为: " f endl;15 16<<<<<<<<<<<<运行结果:运算符重载重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号 的。与其
3、他函数一样,重载运算符有一个返回类型和一个参数列表。加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递, 对象的属性使用 this 运算符进行 ,如下所示:1 Box operator+(const Box&, const Box&);2 <类型> operator<运算符>(参数一,参数二);1 Box oper
4、ator+(const Box&);2 <类型> operator <运算符>(参数列表);17 void print(char c)18 19 cout "字符串为: " c endl;20 21 ;2223 int main()24 25 printData pd;26 pd.print(5); / 输出整数27 pd.print(500.263); / 输出浮点数28 char c = "Hello C+" / 输出字符串29 pd.print(c);30 return 0;31 <<<<&l
5、t;<1 #include <iostream>2 using namespace std;34 class Box5 6 public:78 double getVolume(void) / 计算体积9 10 return length * width * height;11 12 void setLength(double len) / 设置长度13 14 length = len;15 1617 void setWidth(double wid) / 设置宽度18 19 width = wid;20 2122 void setHeight(double hei) / 设
6、置高度23 24 height = hei;25 26 / 重载 + 运算符,用于把两个 Box 对象相加27 Box operator+(const Box& b)28 29 Box box;30 box.length = this length + b.length;31 box.width = this width + b.width;32 box.height = this height + b.height;33 return box;34 35 private:36 double length; / 长度37 double width; / 宽度38 double heig
7、ht; / 高度39 ;40>>>运行结果:有哪些可重载的运算符?双目算术运算符+(加),-(减),*(乘),/(除),%(取余)关系运算符=(等于),!=(不等于),<(小于),>(大于),<=(小于等于),>=(大于等41 int main()42 43 Box Box1; / Box1,类型为 Box44 Box Box2; / Box2,类型为 Box45 Box Box3; / Box3,类型为 Box4647 / Box1 参数设置48 Box1.setLength(10.0);49 Box1.setWidth(10.0);50 Box1.
8、setHeight(10.0);5152 / Box1 的体积53 cout "Box1的体积为: " Box1.getVolume() endl;5455 / Box2 参数设置56 Box2.setLength(20.0);57 Box2.setWidth(20.0);58 Box2.setHeight(20.0);5960 / Box2 的体积61 cout "Box2的体积为: " Box2.getVolume() endl;6263 / 把两个对象相加,得到 Box3 的体积64 Box3 = Box1 + Box2;65 cout "
9、;Box3的体积为: " Box3.getVolume() endl;6667 return 0;68 <<<<<<<<<<<<<<<<<<有哪些不能重载的运算符?重载负号运算符和小于号运算符:1 #include <iostream>2 using namespace std;34 class CDistance5 6 public:7 CDistance(int i) / 构造函数重载8 9 x = i;10 11 CDistance(int a, int b)
10、 / 构造函数重载12 成员 运算符.成员指针 运算符.*,->*域运算符:长度运算符sizeof条件运算符?:预处理运算符#于)逻辑运算符|(逻辑或),&&(逻辑与),!(逻辑非)单目运算符+ (正),-(负),*(指针),&(取地址)自增自减运算符+(自增),-(自减)位运算符| (按位或),& (按位与),(按位取反),(按位异或),,<< (左移),>> (右移)赋值运算符=,+=,-=,*=,/= ,%=,&=,|=,=,<<=,>>=空间申请与new, delete, new , dele
11、te其他运算符()(函数调用),->(成员 ),,(逗号),(下标)13 y =14 z =a;b;15 1617 CDistance operator () / 重载负号运算符18 19 cout "调用负号运算符重载函数" endl;20 x = x;21 cout "重载负号后的值为:" x endl;22 return CDistance(x);23 2425 bool operator <(const CDistance &d) / 重载小于号运算符26 27 cout "调用小于运算符重载函数" end
12、l;28 if (y < d.y) (y d.y z < d.z)29 30 cout "d3 < d2" endl;31 return true;32 33 else34 35 cout "d1 > d2" endl;36 return false;37 38 39 private:40 int x;41 int y;42 int z;43 ;444546 int main()47 48 CDistance d1(10), d2(5); / 创建对象49 d1; / 负号运算符重载50 cout endl;51 d2; / 负号
13、运算符重载52 cout endl;<<<<<<<<<<<<&&=&&<<<<<<<<<<<<<<重载递增运算符:1 #include <iostream>2 using namespace std;34 class Time5 6 public:7 Time()8 9 hours = 0;10 minutes = 0;11 12 Time(int h, int m)13 14 hours = h
14、;15 minutes = m;16 17 void PrintTimeFunc() / 输出时间成员函数18 19 cout hours ":" minutes endl;20 21 Time operator () / 重载前缀递增运算符 +i22 23 cout "调用前置递增运算符重载函数" endl;24 minutes; / 对象加125 if (minutes 60)26 27 hours;28 minutes = minutes 60;29 30 return Time(hours, minutes);31 32 Time operato
15、r (int) / 重载后缀递增运算符 i+33 +>=+<<<<+<<<<<<<<53 CDistance d3(33, 40), d4(10, 30);54 d1 < d2; / 小于号运算符重载5556 return 0;57 C+字符串C+字符串类:1 #include <iostream>2 #include <string>34 using namespace std;534 cout<<"调用后置递增运算符重载函数"<<endl;
16、35 Time t(hours, minutes); / 保存原始值36 minutes; / 对象加137 if (minutes 60)38 39 hours;40 minutes = minutes 60;41 4243 return t;44 45 private:46 int hours; / 0 2347 int minutes; / 0 5948 ;495051 int main()52 53 Time t1(11, 59), t2(10, 50), t3(0, 0);54 t1.PrintTimeFunc(); / 显示t1时间55 t1; / t1加156 t1.PrintT
17、imeFunc(); / 显示t1时间57 cout endl;58 t2.PrintTimeFunc();59 t3=t2 ; / t2+的结果传递给t360 cout "t3的结果为:" / 显示t3时间61 t3.PrintTimeFunc();62 t2.PrintTimeFunc(); / 显示t2时间63 return 0;64 <<+<<+>=+6 int main ()7 8 string str1 = "Hello"9 string str2 = "World"10 string str3;11 int len ;1213 / str1 到 str314 str3 = str1;15 cout "str3 : "
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教师仪容仪表培训
- 2025年便携式振动分析仪项目合作计划书
- 甘肃省天水市甘谷第一中学2025年高三最后一模化学试题含解析
- 复苏室的气道管理
- 天津市六校2025届高考冲刺化学模拟试题含解析
- 2025年止血用医用生物蛋白胶项目建议书
- 兴义市第八中学2025届高三第二次诊断性检测化学试卷含解析
- 2025届安徽省马鞍山含山高三下第一次测试化学试题含解析
- 武汉市武昌区2025届高考冲刺模拟化学试题含解析
- 陕西航空职业技术学院《风景园林研究进展》2023-2024学年第二学期期末试卷
- 果蔬加工工艺学-第9章 果醋酿制
- 英语语言与文化智慧树知到课后章节答案2023年下华侨大学
- 《住宅建筑电气设计规范》
- 2024年中考化学复习教学建议-把握中考方向、共研备考策略课件
- 居民死亡医学证明推断书
- 团体心理辅导课件-团体辅导的理论和技术
- 2022岭南版美术中考试题及答案
- 通信原理第13章-同步原理全章课件
- 北京市室内装修合同范本(七篇)
- 2023年高中音乐课件春游(合唱)
- 通信原理 (完整)
评论
0/150
提交评论