C++面向对象程序设计 第二章 类与对象.ppt
《C++面向对象程序设计 第二章 类与对象.ppt》由会员分享,可在线阅读,更多相关《C++面向对象程序设计 第二章 类与对象.ppt(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社主讲教师:个人主页:http:;/ 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社教材:教材:C+面向对象程序设计面向对象程序设计李涛李涛 主编主编游洪跃游洪跃 陈良银陈良银 李琳等编李琳等编高等教育出版社高等教育出版社20062006年年2 2月出版月出版2022/12/222主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社本书本书内容内容 2022/12/223主讲教师:四川
2、大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社提纲输入与输出流输入与输出流第二章第二章 类与对象类与对象ARM Vector TableFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x001 13 32 2类与对象类与对象类的定义类的定义2022/12/224主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级
3、语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类的诞生(一)类的诞生(一)类(类(Class)是面向对象思想中的一个重要组成)是面向对象思想中的一个重要组成部分。部分。如何在计算机中将如何在计算机中将“类类”表达出来?表达出来?在在C语言中,当定义结构体(语言中,当定义结构体(struct):):struct SAMPLE int member1,member2;var1;以后,就可以使用结构中的成员:以后,就可以使用结构中的成员:int var=var1.member1*var1.member2;2022/12/225主讲教师:四川大学计算机学院主讲教师:四
4、川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类的诞生(二)类的诞生(二)将结构体成员的使用代码写成一个函数,得到:将结构体成员的使用代码写成一个函数,得到:int caluc(struct SAMPLE var)return var.member1*var.member2;操作结构变量操作结构变量2022/12/226主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社然后,将上面的函数放入结构体中然后,将上面的函数放入结构体中struct SAM
5、PLE int calcu()return member1*member2;int member1,member2;数据成员数据成员函数成员函数成员2022/12/227主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类的诞生(三)类的诞生(三)这样的结构体就具有了一定的这样的结构体就具有了一定的属性属性(member1和和member2),也具有一定的),也具有一定的行为行为(函数(函数calcu),),它就是它就是“类类”的雏形。的雏形。该结构体的使用方法如下:该结构体的使用方法如下:struct
6、 SAMPLE var;var.member1=var.member2=10;int temp=var.calcu();2022/12/228主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社2022/12/229主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社C+类的声明与定义(一)类的声明与定义(一)class CCompanyStaff /BEGIN /声明成员函数声明成员函数 void SetBasic
7、Sal(float sal);/设置基本工资设置基本工资 /声明(定义)数据成员声明(定义)数据成员 int m_iStaffNum;/工作编号工作编号 char m_cName20;/姓名姓名 float m_fRateOfAttend;/出勤率出勤率 float m_fBasicSal;/基本工资基本工资;/END 多了一个函数(多了一个函数(SetBasicSal),其它都象结构体。),其它都象结构体。struct class2022/12/2210主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版
8、社CCompanyStaff类的定义以关键字类的定义以关键字class开始。开始。其后是其后是类名。类名。“”表示类定义的开始和结束,表示类定义的开始和结束,最终以分号最终以分号结束结束。一般在类中只声明成员函数的原型,而函数的一般在类中只声明成员函数的原型,而函数的实现(即函数体的定义)则放在类外完成。实现(即函数体的定义)则放在类外完成。“函数原型函数原型”,即只声明函数名、参数类型和,即只声明函数名、参数类型和返回值类型,而不包括函数体代码。返回值类型,而不包括函数体代码。2022/12/2211主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品
9、课程 C+面向对象程序设计 主编:李涛 高教出版社C+类的声明与定义(二)类的声明与定义(二)函数的定义则可在函数(函数的定义则可在函数(SetBasicSal)声明之)声明之后:后:void CCompanyStaff:SetBasicSal(float sal)m_fBasicSal=sal;函数定义:函数名前多了一个函数定义:函数名前多了一个类作用域运算符类作用域运算符(CCompanyStaff:),用于标识该函数定义),用于标识该函数定义属于哪一个类。属于哪一个类。2022/12/2212主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程
10、 C+面向对象程序设计 主编:李涛 高教出版社C+类的声明与定义(三)类的声明与定义(三)对于对于C+语言的编程习惯:语言的编程习惯:1、将类的声明存放于、将类的声明存放于“*.h”或或“*.hpp”的头文件的头文件中,每个类一个声明文件。中,每个类一个声明文件。2、将类的定义存放于、将类的定义存放于“*.cpp”文件中,与相应文件中,与相应的声明文件一一对应的声明文件一一对应.c .cpp2022/12/2213主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社封装成类的好处封装成类的好处可以实现可以
11、实现数据隐藏数据隐藏。封装也确定了类成员的封装也确定了类成员的访问属性访问属性。2022/12/2214主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社对象的封装性对象的封装性C+语言引入面向对象思想,引入类(对象)语言引入面向对象思想,引入类(对象)的概念之后,必然会具有一些新的特性。的概念之后,必然会具有一些新的特性。面向对象思想中类(对象)的基本特性之一:面向对象思想中类(对象)的基本特性之一:封装性封装性。封装性:直观理解,类将属于它的数据(成员封装性:直观理解,类将属于它的数据(成员变量)和
12、针对数据的操作(成员函数)包裹在变量)和针对数据的操作(成员函数)包裹在一起就是一种封装。一起就是一种封装。封装的目的:保护类(对象)的实现。封装的目的:保护类(对象)的实现。对封装属性进行细分:公有的;私有的;保护对封装属性进行细分:公有的;私有的;保护的。的。2022/12/2215主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社C+的封装(一)的封装(一)C+语言为了实现面向对象的封装,引入了三语言为了实现面向对象的封装,引入了三个新的个新的“修饰修饰”关键字:关键字:public(公有的):公
13、开的,可见的。对象成(公有的):公开的,可见的。对象成员(变量与方法)可以在对象外使用。员(变量与方法)可以在对象外使用。private (私有的):不可见的。成员只能在(私有的):不可见的。成员只能在对象内部使用。对象内部使用。protected (保护的):受到保护的。成员也(保护的):受到保护的。成员也只能在内部使用。(以后再讨论)只能在内部使用。(以后再讨论)C+类的成员(变量和方法)具有了各自不同类的成员(变量和方法)具有了各自不同的属性。的属性。2022/12/2216主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序
14、设计 主编:李涛 高教出版社C+的封装(二)的封装(二)class CCompanyStaff public:void SetBasicSal(float sal);/设置基本工资设置基本工资 private:int m_iStaffNum;/工作编号工作编号 char m_cName20;/姓名姓名 float m_fRateOfAttend;/出勤率出勤率 float m_fBasicSal;/基本工资基本工资;/END 2022/12/2217主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社C+
15、的封装(三)的封装(三)CCompanyStaff staff;staff.SetBasicSal(600);/合法的,因为合法的,因为SetBasicSal是一个是一个公开(公开(public)的方法。)的方法。staff.m_iStaffNum=100;/非法的,因为非法的,因为m_iStaffNum是是一个私有(一个私有(private)的变量)的变量。void CCompanyStaff:SetBasicSal(float sal)m_fBasicSal=sal;/SetBasicSal是对象的成员,所以它是对象的成员,所以它的定义中可以访问的定义中可以访问m_fBasicSal私有变
16、量。私有变量。2022/12/2218主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社C+的封装(四)的封装(四)1、C+类定义中的类定义中的缺省属性为私有缺省属性为私有的的(private)。)。2、每个修饰符的作用范:从一个修饰符开始,、每个修饰符的作用范:从一个修饰符开始,直到另外一个修饰符时结束(或类结束了)。直到另外一个修饰符时结束(或类结束了)。3、C+类中的成员(变量和方法)都应该明类中的成员(变量和方法)都应该明确地指明它们各自的属性。确地指明它们各自的属性。2022/12/2219主
17、讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类成员的访问权限类成员的访问权限封装所实现的数据隐藏是封装所实现的数据隐藏是面向对象程序设计的面向对象程序设计的一个一个关键特性关键特性隐藏一个类的数据从而使其隐藏一个类的数据从而使其他类无法访问。他类无法访问。隐藏由封装实现,所以隐藏所实现的类成员的隐藏由封装实现,所以隐藏所实现的类成员的访问控制权限也和封装方法一一对应访问控制权限也和封装方法一一对应。对应于封装,类成员有对应于封装,类成员有3种访问权限:种访问权限:公有类型(公有类型(public)、
18、)、私有类型(私有类型(private)保护类型(保护类型(protected)。)。数据隐藏数据隐藏2022/12/2220主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类类 私有私有 公有公有数据或函数数据或函数数据或函数数据或函数无法从类无法从类外访问外访问允许从类允许从类外访问外访问类内类 外2022/12/2221主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社公有类型的成员定义了类的接口,由关键
19、字公有类型的成员定义了类的接口,由关键字public声明,在声明,在类外只能访问公有成员类外只能访问公有成员。私有类型的访问权限为私有的成员由关键字私有类型的访问权限为私有的成员由关键字private声明,它们只能被类本身的成员函数访声明,它们只能被类本身的成员函数访问,问,来自类外部的任何访问都是非法的来自类外部的任何访问都是非法的。保护类型的成员与私有成员类似,区别仅在于保护类型的成员与私有成员类似,区别仅在于继承过程中,继承过程中,保护类型的成员可以被所在类的保护类型的成员可以被所在类的派生类成员函数访问派生类成员函数访问;而这一点对于私有成员;而这一点对于私有成员来说是非法的。来说是非
20、法的。2022/12/2222主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社类的成员函数类的成员函数可以访问类的所有成员,没有任可以访问类的所有成员,没有任何限制;何限制;而而类对象类对象访问类的成员就要受到访问控制符的访问类的成员就要受到访问控制符的限制。限制。访问权限举例:访问权限举例:sclass2_1_demo.h smain2_1.cpp 类对象和类的类对象和类的成员函数对数成员函数对数据成员的访问据成员的访问权限不同。权限不同。2022/12/2223主讲教师:四川大学计算机学院主讲教师
21、:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社外部接口是类外访问类中私有数据的外部接口是类外访问类中私有数据的桥梁。桥梁。声明时,类中不同访问权限的成员可以按声明时,类中不同访问权限的成员可以按任意任意顺序顺序出现。出现。但依然涉及到一个编程习惯问题:但依然涉及到一个编程习惯问题:“以数据为中心以数据为中心”“以行为为中心以行为为中心”国际公约。国际公约。2022/12/2224主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社建议把一个类的数
22、据成员都声明为私有的访问建议把一个类的数据成员都声明为私有的访问权限。权限。这样做有两个好处:这样做有两个好处:一是一是信息隐藏信息隐藏,即实现封装,把类的内部实现,即实现封装,把类的内部实现和外部表现分开,让使用者无需了解类的实现和外部表现分开,让使用者无需了解类的实现细节;细节;二是二是数据保护数据保护,将类的重要信息保护起来,以,将类的重要信息保护起来,以免被其他程序不恰当地修改。免被其他程序不恰当地修改。2022/12/2225主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社成员函数的实现成员
23、函数的实现 被隐藏的数据可以有成员函数来访问,对数据被隐藏的数据可以有成员函数来访问,对数据的操作也体现在成员函数中:的操作也体现在成员函数中:成员函数决定对象的操作行为。成员函数决定对象的操作行为。它是程序算法的实现部分。它是程序算法的实现部分。它也是对封装的数据进行操作的唯一途径。它也是对封装的数据进行操作的唯一途径。它有两种方式:它有两种方式:类外实现和类内实现类外实现和类内实现。数据对成员函数数据对成员函数无法隐藏。无法隐藏。2022/12/2226主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出
24、版社1一般实现方式一般实现方式类外实现成员函数的形式如下:类外实现成员函数的形式如下:返回值类型返回值类型 类名类名:成员函数名成员函数名(形式参数表)(形式参数表)函数体函数体例例2.2 企业员工类的实现。企业员工类的实现。sclass2_2_companyStaff.h s2_2sclass2_2_companyStaff.cpp s2_2smain2_2.cpp 2022/12/2227主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社2内联函数方式内联函数方式内联函数是指程序在编译时用函数的内联
25、函数是指程序在编译时用函数的代码替换代码替换每一处函数调用的地方每一处函数调用的地方。内联的优点内联的优点以空间换时间以空间换时间。内联的内联的两种方式两种方式:系统默认:系统默认:sclass2_2_0_companyStaff.h 和函数前加关键字和函数前加关键字inline:inline ()smain2_3.cpp。2022/12/2228主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 高级语言程序设计II 四川大学精品课程 C+面向对象程序设计 主编:李涛 高教出版社内联和宏替换内联和宏替换宏替换是在宏替换是在编译前编译前由由预处理程序进行预处理预处理程序进行预处理,它只做
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+面向对象程序设计 第二章 类与对象 C+ 面向 对象 程序设计 第二
限制150内