版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
医用仪器软件设计——基于MFC面向对象程序设计04Contents.1类的封装实验2类的继承实验3类的多态实验4
重载实验5抽象类实验6接口实验7异常处理实验0类的基础知识0.类的基础知识0.1面向对象和面向过程函数1:打开冰箱(){人站在冰箱前,打开冰箱。。。}函数2:储存大象(){大象先迈左腿,再迈右腿。。。}函数3:关闭冰箱(){人站在冰箱前,关闭冰箱。。。}以事物为中心以分类的方式解决问题用类组织代码以过程为中心用函数组织代码按步骤去解决问题人{打开(冰箱){冰箱.打开();}存储(大象){大象.进入();}关闭(冰箱){冰箱.关闭();}}性能高易维护,易使用,易扩展优点编程思想面向过程面向对象举例特点人把大象装进冰箱冰箱{打开(){}关闭(){}}大象{进入(冰箱){}}共同点相辅相成,并不是对立。整体上用面向对象把控,细节上用面向过程解决。0.类的基础知识0.2类和对象具有共同属性和行为的事物的抽象客观存在的事物皆为对象对象是类的实例类是对象的模板面向对象类对象举例特点联系0.类的基础知识0.3类的定义类:对现实生活中具有共同属性和行为的事物的抽象。类的组成:属性和行为属性:在类中通过成员变量来体现(类中函数外的变量)行为:在类中通过成员函数来体现定义类的步骤定义类名确定成员的访问权限:默认private权限,可连续共用访问权限添加属性(变量)/行为(函数){}后添加分号;class类名{
访问权限:
变量1的数据类型变量1;
变量2的数据类型变量2; ……
函数1;
函数2;
……};类名:人(Person)属性:姓名(name)年龄(age)身高(height)性别(sex)行为:吃饭(eat)睡觉(sleep)自我介绍(introduce)0.类的基础知识创建对象格式:类名对象名;示例:Personp;Personp;对象类型对象名称使用对象1、使用成员变量格式:对象名.变量名;示例:;2、使用成员函数格式:对象名.函数名();示例:p.eat();0.4对象的使用0.类的基础知识0.5构造函数和析构函数格式:class类名{
类名(参数){
}
~类名(){}}括号法调用构造函数:intmain(){
Personp; //调用默认无参构造函数
Personp1(10); //调用有参构造函数}作用构造函数:创建对象时为对象的属性赋值,由编译器自动调用析构函数:执行对象的清理工作,对象销毁前系统自动调用语法构造函数:类名(){}函数名与类名相同没有返回值,也不写void注意:如果定义了构造函数,系统将不再提供默认的构造函数。建议时刻保留无参构造函数的存在。使用隐式调用:如果不写构造和析构函数,编译器会默认提供空实现的无参函数显式调用:构造函数可以有参数,可发生重载;析构函数不能带有参数析构函数:~类名(){}函数名与类名相同,名称前加符号~没有参数,没有返回值,也不写void1.类的封装实验1.1实验内容
创建CalcTime类,在类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec;用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC;用于计算三个时间值的CalcTimeVal()函数;用于获取三个时间值的GetTimeVal()函数。创建ConvertTime类,在类中创建CalcTime类型的对象,通过对象分别获取转换的小时值、分钟值和秒值,然后通过cout输出转换结果。其中,CalcTime类中的CalcTimeVal()、GetTimeVal()和三个常量访问属性为public,其余的成员变量访问属性为private。在main()函数中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。1.类的封装实验1.2实验原理—封装封装的概念:封装是把过程和数据包围起来,提供相应的方式进行获取。类是封装的一种体现,类将属性和行为作为一个整体,用来表现生活中的事物。封装主要用于信息隐藏,通过关键字private,protected和public实现属性和行为的权限控制。通俗地说,把该隐藏的隐藏起来,该暴露的暴露出来。如何进行封装(以属性封装为例):(1)将属性私有化:利用权限修饰符来控制权限,防止被随意获取(2)在方法中进行属性的读写(获取和设置),写权限可以检测数据有效性封装的好处:提高代码的安全性1.类的封装实验1.3代码分析创建CalcTime类,在类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec;用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC;用于计算三个时间值的CalcTimeVal()函数;用于获取三个时间值的GetTimeVal()函数。创建ConvertTime类,在类中创建CalcTime类型的对象,通过对象分别获取转换的小时值、分钟值和秒值,然后通过cout输出转换结果。其中,CalcTime类中的CalcTimeVal()、GetTimeVal()和三个常量访问属性为public,其余的成员变量访问属性为private。在main()函数中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。
UML类图【箭头指向】带普通箭头的实线,指向被拥有者。【权限符号】【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。2.类的继承实验2.1实验内容创建一个父类CalcTime,在父类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec;用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN;用于计算小时值和分钟值,同时获取对应值后向外输出的GetTimeVal()函数。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于计算秒值,同时获取对应值向外输出的GetSecVal()函数;用于判断tick是否符合条件的CalcFlg()函数;用于打印转换结果的DispTime()函数。在main()函数中创建一个CalcAllTime型对象,该对象名为ct,然后获取键盘输入值(0~86399之间的值,包括0和86399),实现秒值-时间值转换,并输出转换结果。2.类的继承实验2.2实验原理继承的格式格式:class子类名:继承方式父类名{}范例:classStudent:publicPerson{}Person:是父类,也被称为基类、超类Student:是子类,也被称为派生类继承的介绍:继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义追加属性和方法。注意事项:继承必须在合理的范围内进行向上抽取。可以说:学生是人,狗是动物
不能说:狗是人继承的好处:减少重复代码。—继承学生类:Student
属性:国籍,姓名,学生号
方法:自我介绍,睡觉,学习教师类:Teacher
属性:国籍,姓名,教师号
方法:自我介绍,睡觉,讲课抽取出共同的属性和方法人类:Person
属性:国籍,姓名
方法:自我介绍,睡觉学生类/教师类继承自人类示例:2.类的继承实验2.2实验原理继承的格式:class子类名:继承方式父类名{}—访问权限和继承方式继承方式一共有三种:公有继承保护继承私有继承访问权限类内类外子类public可访问可访问可访问protected可访问不可访问可访问private可访问不可访问不可访问访问权限2.类的继承实验2.3代码分析创建一个父类CalcTime,在父类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec;用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN;用于计算小时值和分钟值,同时获取对应值后向外输出的GetTimeVal()函数。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于计算秒值,同时获取对应值向外输出的GetSecVal()函数;用于判断tick是否符合条件的CalcFlg()函数;用于打印转换结果的DispTime()函数。在main()函数中创建一个CalcAllTime型对象,该对象名为ct,然后获取键盘输入值(0~86399之间的值,包括0和86399),实现秒值-时间值转换,并输出转换结果。
UML类图【泛化关系】用于继承【箭头指向】实线空心箭头表示,子类指向父类3.类的多态实验3.1实验内容创建一个CalcTime类,在CalcTime类中定义用于保存小时值的成员变量mHour,用于计算并获取对应时间值的虚方法getTimeVal()方法。通过公有继承方式继承基类CalcTime来创建CalcMin类,在CalcMin类中定义用于保存分钟值的成员变量mMin,用于计算并获取对应时间值的getTimeVal()方法。通过公有继承方式继承基类CalcTime来创建CalcSec类,在CalcSec类中定义用于保存秒值的成员变量mSec,用于计算并获取对应时间值的getTimeVal()方法。然后创建一个ConvertTime类,在ConvertTime类中定义一个CalcTime类型的指针,指针名为ct;分别创建CalcTime、CalcMin和CalcSec的对象,对象名分别为ctHour、ctMin和ctSec,之后通过指针ct调用各类中的getTimeVal()方法计算对应时间,通过cout输出转换后的时间结果。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。3.类的多态实验3.2实验原理—多态多态的含义:同一个行为导致不同的行为结果。多态的体现静态多态:函数重载动态多态:派生类和虚函数实现运行时多态
满足条件:继承、重写虚函数、父类指针或引用指向子类对象动态多态的实现:定义类时,用virtual关键字修饰可能在继承过程中被重写的函数,被virtual声明的函数(虚函数)被重写后就具备了多态的特性。重写:子类中出现和父类一模一样的函数声明,但是函数体不同。3.类的多态实验3.3代码分析
创建一个CalcTime类,在CalcTime类中定义用于保存小时值的成员变量mHour,用于计算并获取对应时间值的虚方法GetTimeVal()方法。通过公有继承方式继承基类CalcTime来创建CalcMin类,在CalcMin类中定义用于保存分钟值的成员变量mMin,用于计算并获取对应时间值的GetTimeVal()方法。通过公有继承方式继承基类CalcTime来创建CalcSec类,在CalcSec类中定义用于保存秒值的成员变量mSec,用于计算并获取对应时间值的GetTimeVal()方法。然后创建一个ConvertTime类,在ConvertTime类中定义一个CalcTime类型的指针,指针名为ct;分别创建CalcTime、CalcMin和CalcSec的对象,对象名分别为ctHour、ctMin和ctSec,之后通过指针ct调用各类中的GetTimeVal()方法计算对应时间,通过cout输出转换后的时间结果。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。4.重载实验4.1实验内容创建CalcTime类,在CalcTime类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算并输出小时值、分钟值和秒值的CalcTimeVal()及其重载函数。其中,CalcTimeVal()及其重载函数和三个成员变量的访问属性为public。在main()方法中创建CalcTime类型的对象,获取键盘输入值(0~86399之间的值,包括0和86399),CalcTime类的对象通过分别调用CalcTimeVal()及其重载函数获取转换的小时值、分钟值和秒值,然后输出转换结果。4.重载实验4.2实验原理函数重载:指同一个类中定义的多个方法之间的关系,满足以下条件的多个函数相互构成重载函数位于同一个类中函数具有相同的方法名函数的参数不同:类型不同或者数量不同(与返回值无关)
位置修饰符返回值方法名参数方法体重载同一个类中无关无关必须相同必须不同不同重写子类父类中大于等于小于等于必须相同必须相同不同—重载重载与重写的区别4.重载实验4.3代码分析创建CalcTime类,在CalcTime类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算并输出小时值、分钟值和秒值的CalcTimeVal()及其重载函数。其中,CalcTimeVal()及其重载函数和三个成员变量的访问属性为public。在main()方法中创建CalcTime类型的对象,获取键盘输入值(0~86399之间的值,包括0和86399),CalcTime类的对象通过分别调用CalcTimeVal()及其重载函数获取转换的小时值、分钟值和秒值,然后输出转换结果。5.抽象类实验5.1实验内容
创建Time类,在Time类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,然后通过virtual定义纯虚函数DispTime(),以达到使Time类成为抽象类。通过公有继承的方式继承Time类来创建CalcTime类,在CalcTime类中定义用于计算小时值的CalcHour()函数,用于计算分钟值的CalcMin()函数,用于计算秒值的CalcSec()函数,最后,重写用于显示时间的DispTime()函数。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后通过CalcTime的对象ct调用对应的函数,实现秒值-时间值转换,并输出转换结果。5.抽象类实验5.2实验原理抽象类:带有纯虚函数的类称为抽象类。—抽象类抽象类的引入:动物是抽象的事物,只有实例化为具体的动物才知道具体的行为。所以在创建动物类的时候可以不写具体的行为,体现在函数中只有函数申明没有函数体。纯虚函数:指在父类中声明的虚方法的原型后加“=0”的函数,纯虚函数没有定义具体的实现。纯虚函数的声明格式:virtual返回值类型成员函数名(参数表)=0;在C++中抽象类有以下规定:(1)抽象类只能用作其他类的基类,不能建立抽象类对象。(2)抽象类不能用作参数类型、方法返回类型或显式转换的类型。(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。5.抽象类实验5.3代码分析
创建Time类,在Time类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,然后通过virtual定义纯虚方法DispTime(),以达到使Time类成为抽象类。通过公有继承的方式继承Time类来创建CalcTime类,在CalcTime类中定义用于计算小时值的CalcHour()函数,用于计算分钟值的CalcMin()方法,用于计算秒值的CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后通过CalcTime的对象ct调用对应的方法,实现秒值-时间值转换,并输出转换结果。UML类图中纯虚函数用斜体表示6.接口实验6.1实验内容
创建Interface类,在Interface类中不声明任何变量,然后通过virtual声明纯虚函数DispTime()、CalcHour()、CalcMin()和CalcSec(),这时的Interface类属于一个接口类。通过公有继承的方式继承Interface类来创建CalcTime类,在CalcTime类中重写CalcHour()函数来计算小时值,重写CalcMin()函数来计算分钟值,重写CalcSec()函数来计算秒值,最后,重写用于显示时间的DispTime()函数。在main()函数中获取键盘输入值(0~86399之间的值,包括0和86399),然后通过CalcTime的对象ct调用对应的函数,实现秒值-时间值转换,并输出转换结果。6.接口实验6.2实验原理接口:描述了类的行为和功能,而不需要完成类的特定实现,即只包含纯虚函数的类为接口。—接口在C++中接口满足以下规定:(1)类中没有定义任何的成员变量。(2)所有的成员函数都是公有的。(3)所有的成员函数都是纯虚函数。(4)接口是一种特殊的抽象类。(5)接口一旦被继承需要重写所有的成员函数才能创建对象。6.接口实验6.3代码分析
创建Interface类,在Interface类中不声明任何变量,然后通过virtual声明纯虚函数DispTime()、CalcHour()、CalcMin()和CalcSec(),这时的Interface类属于一个接口类。通过公有继承的方式继承Interface类来创建CalcTime类,在CalcTime类中重写CalcHour()函数来计算小时值,重写CalcMin()函数来计算分钟值,重写CalcSec()函数来计算秒值,最后,重写用于显示时间的DispTime()函数。在main()函数中获取键盘输入值(0~86399之间的值,包括0和86399),然后通过CalcTime的对象ct调用对应的函数,实现秒值-时间值转换,并输出转换结果。
UML类图【实现关系】类与接口的关系【箭头指向】带三角箭头的虚线,箭头指向接口7.异常处理实验7.1实验内容创建CalcTime类,在类中依次定义用于保存小时值、分钟值和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心血管疾病临床表现及护理要点
- 2026 专注力培养智能评估课件
- 喉癌的症状分析与手术后护理建议
- 安全管理员考试秘籍
- 白内障病症状分析及护理指导培训
- 帕金森病常见症状讲解及护理要点培训
- 呼吸功能训练器
- 武术训练法讲解
- 急性左心衰竭科普
- 牙齿的营养与保健
- 成都天府国际生物城发展集团有限公司招聘笔试题库2026
- 超短波疗法课件
- REACH SVHC 251项高关注物质清单
- 心静脉导管、PICC、CVC管道维护考试题(含答案)
- 行政工作行政工作处理标准化流程
- 粮食行业消防安全培训课件
- 2025版标准劳动合同模板下载
- 家长情绪管理课件教学
- 金融企业贷款减免管理办法
- 民间协会预算管理办法
- 2025-2030全球与中国蛋氨酸行业发展现状及趋势预测分析研究报告
评论
0/150
提交评论