




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 C+运算符的重载 v 运算符是一些系统预定义的函数名称 v 即用一些特定的符号表示各种运算 v 每个运算符对运算数据都有一定要求。 例如: “+”运算符只能对int、double等类型进行加法运算。 运算符重载是让运算符能够对新定义的数据类型进 行运算。 1 运算符重载含义 例如: dt是date类对象,语句dt+错误。因为date类是新数 据类型,其中没有定义“+”运算符。 class date int mo,da,yr; public: date(int m,int d,int y)mo=m;da=d;yr=y; ; void main() date dt(1,2,99); dt+; /错误语句 2 C+运算符重载注意事项 (1) 一般来说,不改变运算符原有含义,只让它能够 对新的数据类型进行计算。例如,重载“+”运算符后,它 的功能还是进行加法运算。 (2) 重载运算符时,不能改变运算符原有的优先级别 ,也不能改变运算符需要的操作数的数目。 (3) 有些运算符不能进行重载。如“.”类成员运算符、 “*”类指向运算符、“:”类作用域分解运算符、“?:” 条件运算运算符。 (4) 不能人为定义新的运算符,只能使用系统提供的 原有运算符。 3 二元算术运算符重载为类的成员函数 v可以将运算符重载为类的成员函数。 v实现运算符功能的成员函数称成员运算符函数或运算符函数 。 v在类中定义运算符函数时应注意以下问题: (1) 对于一元运算符函数,用友元函数重载运算符时,需 要声明一个形式参数。若用成员函数重载运算符时,则不能再 声明形式参数,这个形式参数由成员函数的this指针提供。 (2) 对于二元运算符函数,用友元函数重载运算符时,需 要声明二个形式参数。若用成员函数重载运算符时,则需要声 明一个形式参数,这个形式参数表示运算符的右操作数,左操 作数由成员函数的this指针提供。 4 程序6.1 成员运算符函数举例 日期类date重载“+”运算符,实现日期加上一个天数,得到新日期。 static int dys=31,28,31,30,31,30,31,31,30,31,30,31 ; class date int mo,da,yr; public: date(int m,int d,int y)mo=m;da=d;yr=y; void display() cout dysdt.mo-1) day-=dysdt.mo-1; if(+dt.mo=13) dt.mo=1; dt.yr+; dt.da=day; return dt; ; void main() date olddate(2,20,99); date newdate; newdate=olddate+21;newdate.display(); 程序输出结果 : 3 / 13 / 99 5 重载为类的友元函数 程序6.2 用友元函数重载运算符举例。 static int dys=31,28,31,30,31,30,31,31,30,31,30,31 ; class date int mo,da,yr; public: date(int m,int d,int y)mo=m;da=d;yr=y; void display() cout dysdt.mo-1) day-=dysdt.mo-1;if(+dt.mo=13)dt.mo=1; dt.yr+; dt.da=day; return dt; ; date operator +(int day,date return dt; void main() date olddate(2,20,99); date newdate; newdate=21+olddate;newdate.display(); 程序输出结果: 3/13/99 6 关系运算符重载 程序 重载关系运算符“”举例。 class date int mo,da,yr; public: date(int m,int d,int y)mo=m;da=d;yr=y; void display() cout mo“/“da“/“yr; friend int operator (date ; void main() date date1(12,7,90),date2(11,22,99); if(date1date2) date1.display(); cout“is less than“; date2.display(); 程序输出结果: 12/7/90 is less than 11/22/99 7 重载 = 运算符 赋值运算符“=”可以被重载,但不能被继承 类中重载赋值运算符依旧延续赋值运算符原有含义 即将赋值号右边对象的私有数据依次拷贝到赋值号 左边对象的私有数据域中。 8 程序6.8 重载 = 运算符举例1 const max=20 ; class student char *name;int age;float score; public: student(int age1,float score1) age=age1;score=score1; name=new charmax; strcpy(name,name1); student() delete name; ; void main() student s1(“Peter“,18,84.5), s2(“Mary“,17,90.0); s1=s2; 9 数据类型转换 v 程序中,当给出的数据类型与要求的数据类型不一致 时,要进行类型转换。 v 类型转换有自动转换和强制转换。 v 本节介绍基本数据类型与类之间转换。 10 通过构造函数进行类型转换 程序6.13 通过构造函数进行类型转换举例 class base int x; public: base()x=0; base(int arg) x=arg; void display()coutxendl; ; void f( base a) a.display(); void main() base a; f(10);a.display(); 程序输出结果: 10 0 程序说明: 语句f(10)中参数10是整型数据 ,因此执行语句f(10)时,首先调 用构造函数base(int arg),将整数 10强制转换为base类型. 语句f(10)与语句f(base(10)等价 。 11 通过类成员函数进行类型转换 程序6.14 实现三种转换 一是从base1类型到int 类型转换 二是从base2类型到int 类型转换 三是从base2类型到base1类型转换 class base1 int x; public:base1(int arg=0) x=arg; operator int() return x; ; class base2 int x; public:base2(int arg=0) x=arg; operator int() return x; operator base1() base1 temp=x; return temp; ; void main() base1 exam1=5; base2 exam2=10; int number; number=(int)exam1; coutnumberendl; exam1=(base1)exam2; number=(int)exam1; coutnumberendl;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小数乘法(单元测试)-2024-2025学年五年级上册数学人教版
- 2025年事业单位工勤技能-湖南-湖南堤灌维护工四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北垃圾清扫与处理工二级(技师)历年参考题库含答案解析
- 2025-2030中国纳米钛酸钡行业发展趋势及投资策略分析报告
- 2025年事业单位工勤技能-湖北-湖北保育员一级(高级技师)历年参考题库含答案解析
- 2025年绿色建筑智能系统集成为核心的节能降耗评估报告
- 2025-2030中国精炼核桃油市场营销策略及发展趋势研究报告
- 2025年事业单位工勤技能-河南-河南管道工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-江西-江西理疗技术员五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏垃圾清扫与处理工三级(高级工)历年参考题库含答案解析(5套)
- 医院标识标牌采购投标方案(技术方案)
- 中学政治九年级《坚持改革开放》说课课件
- 《旅馆建筑设计原理》课件
- 2024年危险化学品经营单位安全管理人员考试练习题(附答案)
- 2024-2030全球与中国探地雷达市场现状及未来发展趋势
- 《飞机结构与系统》课件-机翼结构
- (正式版)JBT 3300-2024 平衡重式叉车 整机试验方法
- 公司跟合作社合作协议书
- 五年级下册计算题400道及答案
- 青少无人机科普教育方案课件
- 叉车操作规程管理制度
评论
0/150
提交评论