版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计普通高等教育“十一五”国家级规划教材中国高等院校计算机基础教育课程体系规划教材
7/21/20231第3讲面向对象概述授课内容类和对象的概念以及它们的定义。主要内容有:1.类和对象的基本概念;2.面向对象分析与设计3.UML4.类的声明;5.对象及其定义;6.类的成员函数;7.对象成员的引用。7/21/20232第3讲类和对象的概念及定义授课要求1.掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2.掌握类对象的定义;3.理解类的成员的访问控制的含义,公有、私有和保护成员的区别。4.能够根据给定的要求定义类并实现类的成员函数;7/21/20233第3讲类和对象的概念及定义授课重点1.本讲的重点是类和对象的概念和定义授课难点1.该讲的难点是类和对象的理解。7/21/202341.面向对象程序设计方法(1)概述面向过程的程序设计小规模大规模力不从心面向对象程序设计7/21/202351.面向对象程序设计方法(1)概述面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。面向对象的程序设计的基本思路:生产汽车组装众多零件面向对象的程序设计:(对象+对象+对象+…)+消息=程序7/21/202361.面向对象程序设计方法(2)对象含义:客观世界中任何一个事物都可以看成一个对象(object)。对象可大可小。对象是构成系统的基本单位。任何一个对象都应当具有这两个要素:属性(attribute)和行为(behavior)
。比如:A.学生“张三”是一个对象,他有属性:学号、姓名、性别等。行为有:学习、吃饭等。B.“打开文件按钮”也是一个对象,它有属性:形状、颜色、大小等。行为有:打开文件等。张三7/21/202371.面向对象程序设计方法在C++程序设计中,属性即基本数据;行为即操作代码,也就是函数,见图1所示。对象之间通过发送和接收消息互相联系的。见图2所示。图1对象图2对象的联系7/21/202381.面向对象程序设计方法使用面向对象的程序设计方法设计软件系统时,首要的问题是确定该系统是由哪些对象组成的,并且设计这些对象。在C++中,每个对象都是由数据和函数(即操作代码)这两部分组成的。7/21/202391.面向对象程序设计方法(3)类(class)含义:具有相同属性和行为的所有对象的集合。比如:所有在校学习的人,具有相同的属性:学号、姓名、性别等,具有相同的行为:学习。所以,这些人构成一个类,即学生类。7/21/2023102.面向对象程序设计的基本特征(1)封装与信息隐蔽(encapsulationandimformationhiding)可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可知的。这样做的好处是大大降低了操作对象的复杂程度。面向对象程序设计方法的一个重要特点就是“封装性”(encapsulation)。7/21/2023112.面向对象程序设计的基本特征所谓“封装”,指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(imformationhiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。7/21/2023122.面向对象程序设计的基本特征(2)抽象(abstraction)在程序设计方法中,常用到抽象这一名词。抽象的过程是将有关事物的共性归纳、集中的过程。抽象的作用是表示同一类事物的本质。比如:把在座的同学的共同特性抽出来:学号、姓名、性别、学习等。把大家都可以归到一类,即“学生”类。7/21/2023132.面向对象程序设计的基本特征(3)继承与重用(inheritance)继承:在一个已有的类上建立一个新的类。C++提供了继承机制,可以很方便地利用一个已有的类建立一个新的类。即“软件重用”。“学生”类增加属性:“专业”“大学生”类继承机制例如:“白马”继承了“马”的基本特征,又增加了新的特征(颜色),“马”是父类,或称为基类,“白马”是从“马”派生出来的,称为子类或派生类。7/21/2023142.面向对象程序设计的基本特征(4)多态性(polymorphism)含义:如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态性。比如:在Windows环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。在C++中,多态性是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。7/21/2023153.面向对象的程序设计含义面向对象的程序设计含义:它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,通过对象响应消息来实现程序的功能。程序设计者的任务包括两个方面:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。7/21/2023163.面向对象的程序设计含义面向对象程序设计的表示:对象=算法+数据结构程序=(对象+对象+对象+…)+消息面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。7/21/2023174、面向对象的分析和设计7/21/202318面向对象的分析
——基本概念OOA环节的主要工作是明确用户的需求,并用标准化的面向对象模型规范地描述这一需求,最后形成面向对象的分析模型,即OOA模型。它主要确定要干什么(“Whattodo”)。OOA强调用对象的属性和服务分别描述事物的静态特征和动态行为。7/21/202319面向对象的设计
——基本概念该环节的主要工作是确定如何做(“Howtodo”),面向对象的设计将在OOA模型的基础上引入界面管理、任务管理和数据管理等方面的内容,从而确定OOD模型。7/21/2023205、UML7/21/2023211概述
——基本概念UnifiedModelingLanguageUML是一种建模的语言,不是编程的语言。UML提供了大量的图形表示模型,我们要掌握类图的表示以及类之间的简单关系。7/21/2023222类图
——基本概念类图是由类和与之相关的各种静态关系共同组成的图形。类图展示的是软件模型的静态结构,类的内部结构以及和其他类的关系。7/21/2023232类图
——类的表示7/21/2023242类图
——对象的表示7/21/2023252类图——关系的表示
——依赖:当要表明一个类使用另一个类作为它的成员函数参数时,就使用依赖关系。通常类之间的调用关系、友元、类的实例化都属于这类关系。依赖、关联、包含、泛化7/21/2023262关系的表示
——关联关联用于表述一个类的对象和另一个类的对象之间相互作用的连接。7/21/2023272关系的表示
——包含聚集表示类之间的关系是整体与部分的关系。组合是一种简单的聚集形式,但是它具有更强的拥有关系。7/21/2023282关系的表示
——泛化类之间的继承关系在UML中称为泛化。7/21/2023296.类的声明和对象的定义(1)类和对象的关系类是对象的抽象,而对象是类的具体实例(instance)。类是抽象的,不占用内存,而对象是具体的,占用存储空间。在C++中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。7/21/202330(2)声明类类型在C++中声明一个类类型和声明一个结构体类型是相似的。声明类的一般形式如下:class
类名{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;protected:受保护的数据和成员函数;};注意:如果在类的定义中不指定限定符,则系统就默认为是私有的(private)。private、protected、public称为成员访问限定符(memberaccessspecifier)。7/21/202331(2)声明类类型下面是声明一个结构体类型的方法:structStudent//声明了一个名为Student的结构体类型{intnum;charname[20];charsex;};Studentstud1,stud2;//定义了两个结构体变量stud1和stud27/21/202332(2)声明类类型现在声明一个类:class
Student//以class开头{intnum;charname[20];charsex;//以上3行是数据成员voiddisplay()//这是成员函数{cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;//以上4行是函数中的操作语句}};Studentstud1,stud2;//定义了两个Student类的对象stud1和stud27/21/202333(2)声明类类型说明:(a)用private声明的成员称为私有的成员,它只能被类中的成员函数访问,不能被类外访问,但可以被友元类的成员函数访问(后面讲到)。(b)用protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。(c)用public声明的成员称为公有的成员,它可以被类中的成员函数访问,也可以被类外访问。7/21/202334(3)定义对象的方法定义对象的方法和定义结构体变量的方法一致。A.先声明类类型,然后再定义对象格式:类名对象名比如:Studentstud1,stud2;//Student是已经声明的类类型或者:class类名对象名
比如:classStudentstud1,stud2;7/21/202335(3)定义对象的方法B.在声明类类型的同时定义对象比如:classStudent//声明类类型{//成员定义省略private://声明以下部分为私有的┆
public://声明以下部分为公用的┆}stud1,stud2;
//定义了两个Student类的对象7/21/202336(3)定义对象的方法C.不出现类名,直接定义对象比如:class//无类名{//成员定义省略private://声明以下部分为私有的┆
public://声明以下部分为公用的┆
}stud1,stud2;//定义了两个无类名的类对象7/21/202337(4)类和结构体类型的异同C++允许用struct来定义一个类类型。structStudent//用关键字struct来声明一个类类型{//类成员声明与class一样。};Studentstud1,stud2;//定义了两个Student类的对象C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。用struct声明的结构体类型实际上也就是类。7/21/202338(4)类和结构体类型的异同区别:(a)用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。如果想分别指定私有成员和公用成员,则应用private或public作显式声明。(b)用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。7/21/2023397.类的成员函数类的成员函数(简称类函数)是函数的一种,它的用法和作用与普通函数基本上是一样的,(1)类的成员函数的定义A.在类体中定义的格式:
函数返回值类型函数名(参数表){//函数体};成员函数在声明时,要指定为:
private(私有的)、
public(公用的)、
protected(受保护的)。注意7/21/2023407.类的成员函数B.在类外定义成员函数在类外定义时,必须在函数名前面加上类名和作用域限定符“∷”。格式:函数返回值类型类名∷函数名(参数表){//函数体};7/21/2023417.类的成员函数比如:classStudent{public:voiddisplay();//公用成员函数原型声明
Private:
intnum;stringname;
charsex;//以上3行是私有数据成员};voidStudent∷display()//在类外定义display类函数{cout<<″num:″<<num<<endl;//函数体
cout<<″name:″<<name<<endl;
cout<<″sex:″<<sex<<endl;}Studentstud1,stud2;//定义两个类对象7/21/2023427.类的成员函数注意:(a)类内定义的成员函数,默认为内置函数(inline)。(b)在类外定义时,在类体中要对函数作声明。(c)如果在作用域运算符“∷”的前面没有类名,或者函数名前面既无类名又无作用域运算符“∷”,则表示该函数不属于任何类,属于一般普通函数。比如:∷display()或display()则表示display函数不属于任何类,属于一般普通函数。7/21/202343(2)inline成员函数类的成员函数也可以指定为内置函数。C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline。比如:前例中的display函数声明为内置函数。
inlinevoiddisplay();如果在类体外定义inline函数,则必须将类定义和成员函数的定义都放在同一个头文件中(或者写在同一个源文件中)注意:7/21/202344(3)成员函数的存储方式只用一段空间来存放这个共同的函数代码段。如图8.5所示。
图8.5显然,这样做会大大节约存储空间。好处7/21/202345(3)成员函数的存储方式如果声明了一个类:classTime{public:
inthour;
intminute;
intsec;voidset(){a>>b>>c;}};cout<<sizeof(Time)<<endl;输出的值是12inthourintminuteintsec++7/21/2023468.对象成员的引用提问:在程序中经常需要访问对象中的成员,与访问结构体成员类似。访问对象中的成员可以有3种方法:
(a)通过对象名和成员运算符访问对象中的成员;(b)通过指向对象的指针访问对象中的成员;(c)通过对象的引用变量访问对象中的成员。对结构体的成员访问方法?7/21/2023478.对象成员的引用例如:Studentstud1,*p;//Student是学生类(a)stud1.num=1001;
(b)p=&stud1;
p->num=1001;或:(*p).num=1001;(C)Student&stud2=stud1;
stud2.num=1001;//引用7/21/2023488.类的封装性和信息隐蔽(1)公用接口与私有实现的分离如果不必公开的信息,使用:private要公开的,才使用:public(2)类声明和成员函数定义的分离为便于多个程序使用某类,应当把类的声明和成员函数的声明放在头文件中(即.h文件),把成员函数的定义放在另一个文件中(即.cpp文件)。7/21/2023498.类的封装性和信息隐蔽(3)面向对象程序设计中的几个名词A.“方法”(method):“方法”是指对数据的操作(类的成员函数)。一个“方法”对应一种操作。外界是通过发“消息”来激活有关方法的。B.“消息”:其实就是一个命令,由程序语句来实现。C.发送“消息”:一个对象通知另一个对象执行它的某条成员函数。D.接收“消息”:一个对象接收到另一个对象要求它执行它的某条成员函数的信息。7/21/2023509.类和对象的简单应用举例例1(P55的例2.1)最简单的例子。//该例子简单,同学们可以自己看运行情况如下:123243↙12:32:43intmain(){Timet1;
cin>>t1.hour;
cin>>t1.minute;
cin>>t1.sec;
cout<<t1.hour<<″:″<<t1.minute<<″:″<<t1.sec<<endl;//输出时间
return0;}#include<iostream>usingnamespacestd;classTime//定义Time类{public://数据成员为公用的
inthour;
intminute;
intsec;};7/21/2023519.类和对象的简单应用举例例2(P56的例2.2)引用多个对象的成员。(1)程序(a)#include<iostream>usingnamespacestd;classTime{public:
inthour;
intminute;
intsec;};7/21/2023529.类和对象的简单应用举例intmain(){Timet1;
cin>>t1.hour;
cin>>t1.minute;
cin>>t1.sec;
cout<<t1.hour<<″:″<<t1.minute<<″:″<<t1.sec<<endl;
Timet2;
cin>>t2.hour;
cin>>t2.minute;
cin>>t2.sec;
cout<<t2.hour<<″:″<<t2.minute<<″:″<<t2.sec<<endl;
return0;}运行情况如下:103243↙10:32:43223243↙22:32:43另:使用函数来进行输入和输出。见程序(b)和(c)。(请同学们自己看书。P57-59)7/21/2023539.类和对象的简单应用举例例3(P60的例2.3)将例2的程序改用含成员函数的类来处理。#include<iostream>usingnamespacestd;classTime{public:voidset_time();//公用成员函数voidshow_time();//公用成员函数
private://数据成员为私有inthour;intminute;intsec;};7/21/2023549.类和对象的简单应用举例intmain(){Timet1;t1.set_time();t1.show_time();Timet2;t2.set_time();t2.show_time();return0;}运行情况与例2中的程序相同。voidTime∷show_time()//在类外定义show_time函数{
cout<<hour<<″:″<<minute<<″:″<<sec<<endl;}voidTime∷set_time()//在类外定义set_time函数{
cin>>hour;
cin>>minute;
cin>>sec;}7/21/2023559.类和对象的简单应用举例例4(P61的例2.4)找出一个整型数组中的元素的最大值。用类来处理。#include<iostream>usingnamespacestd;classArray_max//声明类{public://以下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标识标牌主要工程项目的施工方案与技术措施
- 幼儿园利剑护蕾专项行动工作方案
- 新余市中医院清洗消毒效果ATP荧光检测实操考核
- 新余市中医院临床技能带教考核
- 校长在班主任经验交流会上的讲话-:以经验为梯强班建以责任为炬护成长
- 赣州市中医院听觉诱发电位考核
- 南平市人民医院放射性药物配置专项考核
- 九江市人民医院闭经病因诊断与治疗考核
- 金华市中医院尿激酶静脉溶栓技能考核
- 连云港市人民医院体外冲击波碎石技术考核
- 林业技师考试题库及答案2025
- 2025江苏海氧深冷科技有限公司招聘工作人员9人考试模拟试题及答案解析
- 广东省广州市花都区2024-2025学年上学期九年级期中考试数学试题(含答案)
- 备考期末-六选五-专项练习-2022-2023学年人教版英语八年级上册
- 霍金生平简介静态PPT
- 培训费结算单
- 中日标准件对照表
- IATF16949:2016中文完整
- 大航海时代4霸者之证地图坐标
- SHT3903-2017监理用表
- 财务三大报表简介
评论
0/150
提交评论