第2章类和对象2本章内容2.1面向对象程序设计方法概述☆☆2.2类的定义☆☆☆2.3对象的定义☆☆☆2.4对象成员的引用☆☆☆2.5类和对象的简单应用举例☆☆2.6类的封装性和信息隐蔽☆☆3目标理解面向对象程序设计思想;理解类和对象的概念以及二者之间的关系;掌握类和对象的定义;掌握类的成员函数的定义;掌握对象成员的引用方法;理解类的封装性及实现。4本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽52.1面向对象程序设计方法概述2.1.1什么是面向对象的程序设计(一)面向过程程序设计程序的主体是函数62.1面向对象程序设计方法概述2.1.1什么是面向对象的程序设计(一)面向过程程序设计由E.Dijkstra等人于20世纪70年代提出。缺点:无法适用较大规模的程序的开发;程序的可重用性较差;72.1面向对象程序设计方法概述2.1.1什么是面向对象的程序设计(二)面向对象程序设计20世纪80年代左右提出。基本思想:程序的编写围绕“对象”来进行;82.1面向对象程序设计方法概述2.1.1什么是面向对象的程序设计(二)面向对象程序设计程序的主体是对象92.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(一)对象客观世界中任何一个事物或实体就是对象。例如:一辆汽车、一只小狗乃至一种语言、一个图形、一种管理方式,都可以作为一个对象。102.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(一)对象对象具有两个要素:属性——表示一个对象的静态特征。方法——行为,对象的动态功能。属性:名称品种颜色行为:犬吠吃东西睡觉112.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(一)对象属性——数据进行描述,数据成员方法——函数来实现,成员函数对象数据成员成员函数122.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(二)类一组具有相同特征的对象的属性和方法的描述就称为类。类是对象的抽象,对象是类的实例。程序设计时:1.分析对象的属性和方法;2.定义类类型;3.定义该类的对象,调用方法实现功能。132.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(二)类一组具有相同特征的对象的属性和方法的描述就称为类。例如:输入圆的半径,计算圆的周长和面积面向对象程序设计方法实现142.1面向对象程序设计方法概述2.1.2面向对象的程序设计的基本概念(三)面向对象程序设计的三大特性1、封装性2、继承性3、多态性152.1面向对象程序设计方法概述2.1.3面向对象的软件开发面向对象的软件工程包括:1、面向对象分析(OOA)2、面向对象设计(OOD)3、面向对象编程(OOP)4、面向对象测试(OOT)5、面向对象维护(OOSM)16本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽172.2类的定义2.2.2类的定义(一)定义格式class类名{private:私有数据成员和成员函数;public:公有数据成员和成员函数;protected:保护数据成员和成员函数;};182.2类的定义2.2.2类的定义(二)成员访问权限——表示该成员能否被访问的属性。1、私有的——private特点:只能被本类的成员函数引用(默认权限)2、公有的——public特点:本类的成员以及所有对象可以引用。3、保护的——protected192.2类的定义2.2.3类的数据成员定义格式数据类型成员名;其中:数据类型可是是基本数据类型,也可以是构造数据类型。例如:定义表示圆的类——Circle;定义表示学生的类——Student。20classCircle{private:doubler;……};1、定义表示圆的类——Circle21classStudent{private:intnum;//学号stringname;//姓名charsex;//性别……};2、定义表示学生的类——Student222.2类的定义2.2.3类的数据成员定义格式数据类型成员名;其中:数据类型可是是基本数据类型,也可以是构造数据类型。注意:不能在定义时对数据成员赋初值!232.2类的定义2.2.4类的成员函数用于描述对类中的数据成员实施的操作。类的成员函数是函数的一种。定义方式分为:(一)在类体中定义成员函数;(二)在类体中声明,在类外定义成员函数242.2类的定义2.2.4类的成员函数定义方式分为:1、在类体中定义成员函数class类名{……返回值类型成员函数名(参数){……}};252.2类的定义2.2.4类的成员函数定义方式分为:2、在类体中声明,在类外定义成员函数。class类名{返回值类型成员函数名(参数);};类体中声明262.2类的定义2.2.4类的成员函数定义方式分为:2、在类体中声明,在类外定义成员函数。函数类型类名::成员函数名(参数表){函数体;}在类外定义27本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽282.3对象的定义2.3.1对象的定义定义格式:[class]类名对象名其它定义方式见P47。29本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽302.4对象成员的引用2.4.1通过对象名和成员运算符访问对象中的成员访问格式:对象名.数据成员对象名.成员函数(实参列表)Qs:该对象的所有数据成员和成员函数都能访问吗?312.4对象成员的引用2.4.2通过指向对象的指针访问对象中的成员指向对象的指针:类名*对象指针名=&对象;访问格式:对象指针-数据成员对象指针-成员函数(实参列表)322.4对象成员的引用2.4.3通过对象的引用变量来访问对象中的成员指向对象的引用变量:类名&引用对象名=对象名;访问格式:引用对象名.数据成员引用对象名.成员函数(实参列表)33本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽342.5类和对象的简单应用举例例2.1定义一个表示时钟的类(Time)。1、分析:该类有哪些数据成员?时分秒35classTime{public:inthour;intminute;intsec;};36intmain(){Timet1;cint1.hour;cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.secendl;}37intmain(){Timet1;cint1.hourt1.minutet1.sec;coutt1.hour:t1.minute:t1.secendl;Timet2;cint2.hourt2.minutet2.sec;coutt2.hour:t2.minute:t2.secendl;}多个对象时38封装成函数voidset_time(){cint.hourt.minutet.sec;}voidshow_time(Time&t){coutt.hour:t.minute:t.secendl;}Time&t39intmain(){Timet1;set_time(t1);show_time(t1);Timet2;set_time(t2);show_time(t2);return0;}40封装成类成员函数classTime{public:voidset_time();voidshow_time();private:inthour;intminute;intsec;};41voidTime::set_time(){cinhourminutesec;}voidTime::show_time(){couthour:minute:secendl;}42intmain(){Timet1;t1.set_time();t1.show_time();Timet2;t2.set_time();t2.show_time();return0;}432.5类和对象的简单应用举例例2.1定义一个表示时钟的类(Time)。1、分析:该类有哪些数据成员?该类有哪些成员函数?2、类的具体实现3、main函数中定义Time类的对象,并调用其成员函数实现功能。44本章内容2.1面向对象程序设计方法概述2.2类的定义2.3对象的定义2.4对象成员的引用2.5类和对象的简单应用举例2.6类的封装性和信息隐蔽452.6类的封装性和信息隐蔽2.6.1公用接口与私有实现的分离2.6.2类声明和成员函数定义的分离2.6.3面向对象程序设计的几个名词46总结本章主要讲授内容面向对象程序设计对象、类封装性、继承性和多态性类的定义对象的定义对象成员的引用47实验安排下周二第3单元上机。实验内容:实验二类和对象的使用1、P68第6题。48实验安排2、定义一个学生类Student,具体要求如下:数据成员包括学号(num)、姓名(name)、数学成绩(math)、英语成绩(english)和C++成绩(cprogram);成员函数:set_stu——设置学生的信息;show_stu——输出学生的信息;ave_score——返回学生的平均成绩;在main函数中调用以上函数实现相应功能。