《类与对象》PPT课件

上传人:san****019 文档编号:22862626 上传时间:2021-06-01 格式:PPT 页数:46 大小:272.50KB
收藏 版权申诉 举报 下载
《类与对象》PPT课件_第1页
第1页 / 共46页
《类与对象》PPT课件_第2页
第2页 / 共46页
《类与对象》PPT课件_第3页
第3页 / 共46页
资源描述:

《《类与对象》PPT课件》由会员分享,可在线阅读,更多相关《《类与对象》PPT课件(46页珍藏版)》请在装配图网上搜索。

1、1 +第四章 类与对象C 2 主要内容n 面向对象的基本特点n 类和对象n 构造函数和析构函数n 类的组合n 结构体与联合体 3 面向对象l 目的:实现软件设计的产业化 l 观点:自然界是由实体(对象)所组成 l 程序设计方法: 使用面向对象的观点来描述模仿并处理现实问题。l 要求:高度概括、分类、和抽象。q 面向对象的方法q 面向对象的主要特点l 抽象、封装、继承、多态 4 抽象抽象:对具体问题(对象)进行概括,抽出这一类对象的公共性质并加以描述的过程。l 首先注意的是问题的本质及描述,其次是实现过程或细节l 抽象包括:数据抽象和行为抽象 数据抽象: 描述某类对象的属性或状态(对象相互区别的

2、物理量) 行为抽象(功能抽象、代码抽象): 描述某类对象的共同行为或功能特征l 抽象的实现:通过类的声明。 5 抽象示例例:时钟的描述l 数据抽象: int hour, int minute, int secondl 行为抽象: showTime(), setTime() 6 封装封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,即将数据与操作数据的函数进行有机结合,形成 “类”,其中数据和函数都是类的成员。l 封装可以增强数据的安全性,并简化编程。用户不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。 7class Clock public: v

3、oid setTime(int NewH, int NewM, int NewS); void showTime(); private: int hour, minute, second; 抽象实现例:时钟的描述l 数据抽象:int hour, int minute, int secondl 行为抽象: showTime(), setTime()l 时钟类public和private用于指定成员的不同访问权限。 此处的分号不能省略! 8 继承与多态继承:C+提供了继承机制,允许程序员在保持原有类特性的基础上,进行更具体、更详细的说明。(详见第 7 章)多态:同一段程序能处理多种类型对象的能力。

4、在C+中,多态性是通过强制多态(如类型转换)、重载多态(如函数重载、运算符重载)、类型参数化和包含多态(如虚函数、模板)。(详见第 8 章) 9 主要内容n 面向对象的基本特点n 类和对象n 构造函数和析构函数n 类的组合n 结构体与联合体 10 类和对象类是 C+ 面向对象程序设计的核心!q 类与函数l 函数是结构化程序设计的基本模块,函数将逻辑上相关的数据与语句封装,用于完成特定的功能。l 类是面向对象程序设计的基本模块,类将逻辑上相关的数据与函数封装,是对问题的抽象描述。类的集成程度更高,更适合大型复杂程序的开发。q 类的使用:先定义后使用 11 类的定义q 类的定义class 类的名称

5、 public:公有成员(外部接口) private:私有成员 protected:保护型成员; 12 类的定义注:在类中可以只声明函数原型,函数的实现(函数体)可以在类外面定义class Clock public: void setTime(int NewH, int NewM, int NewS); void showTime(); private: int hour, minute, second;Clock myclock; Clock y; 13 访问权限类的成员:数据成员(描述问题的属性)和函数成员(描述问题的行为)类的成员的访问权限控制:public,private,protec

6、tedl public(公有类型、外部接口): 任何外部函数都可以访问公有类型的数据和函数l private(私有类型): 只能被本类中的函数成员访问,任何来自外部的访问都非法l protected(保护类型): 与私有类似,区别在于继承过程中的影响不同(见第 7 章) 14class Clock private: int hour, minute, second; public: void setTime(int NewH, int NewM, int NewS); void showTime(); 访问权限几点说明:l 一般情况下,类的数据成员都应该声明为私有类型l 一个类如果没有任何外部

7、接口,则无法使用l 在定义类时,不同访问属性的成员可以按任意顺序出现,修饰访问权限的关键字也可以多次出现,但一个成员只能有一种访问属性!一般将公有类型的成员放在最前面,便于阅读。例: l 上述声明并没有为 Clock 分配内存,只是告诉编译器 Clock 是什么:包含哪些数据,有什么功能。 15 对象对象是类的实例,即具有该类型的变量q 对象的定义类的名称 对象名例: l 对象所占的内存空间只用于存放数据成员,函数成员在内存中只占一份空间,即不会在每个对象中存储副本 l 定义对象的过程也称为类的实例化Clock myclock;Clock y;声明一个类后,便可将其作为新数据类型来声明变量(即

8、对象) 16 对象成员的访问q 访问对象的成员的一般形式对象名.数据成员名对象名.函数成员名(参数列表)例:注:类的成员函数可以访问所有数据成员; 外部函数只能访问公有成员。myclock.showTime();myclock.setTime(16,10,28); 17 成员函数q 类的成员函数的定义l 与普通函数的区别:前面要加上类的名称和两个连续冒号l 类的成员函数可以在类外部定义,但在类内部必须声明例:数据类型 类的名称:函数名(形参列表) 函数体; void Clock:setTime(int newH, int newM, int newS) hour=newH; minute=ne

9、wM; second=newS; 18 目的对象调用成员函数时,需用 “.” 操作符指定调用所针对的对象,这一对象就是本次调用的目的对象。在成员函数中,可以直接引用目的对象的所有数据成员,而无需使用 “.” 操作符。在成员函数中,引用其它对象的数据成员和函数成员时,必须使用 “.” 操作符。在类的成员函数中,既可以访问目的对象的私有成员,也可以访问当前类的其它对象的私有成员。 19 默认形参值与普通函数一样,成员函数也可以带默认形参值。注:成员函数的默认形参值只能在类的定义中设置,不能在类定义之外的函数定义中设置。q 带默认形参值的成员函数class Clock public: void se

10、tTime(int NewH=0, int NewM=0, int NewS=0); . .; 20 内联成员函数q 内联成员函数的定义:隐式方式和显式方式l 隐式方式:将函数体直接放在类的定义中class Clock public: void setTime(int NewH=0, int NewM=0, int NewS=0); void showTime() couthour“:”minute“:”secondendl; . . ; 21 内联成员函数 l 使用内联函数可以减少调用开销,提高效率,但只适合相当简单的函数;l 使用显式方式定义内联函数可以保持类定义的简洁q 内联成员函数的定

11、义:隐式方式和显式方式l 显式方式:将函数体直接放在类的定义中class Clock public: void setTime(int NewH=0, int NewM=0, int NewS=0); void showTime(); . .;inline void Clock:showTime() couthour“:”minute“:”secondendl; 22 程序示例#include using namespace std;class Clock/ 时钟类的声明 public: / 外部接口,公有成员函数 void setTime(int NewH=0, int NewM=0, in

12、t NewS=0); void showTime(); private: / 私有数据成员 int hour, minute, second;/ 成员函数的定义(时钟类成员函数的具体实现) void Clock:setTime(int NewH, int NewM, int NewS) hour=NewH; minute=NewM; second=NewS; inline void Clock:showTime() couthour:minute:secondendl; 23 / 主函数int main() Clock myClock;/ 定义对象myClock coutFirst time:

13、 endl; myClock.setTime();/ 设置时间为默认值 myClock.showTime();/ 显示时间 coutSecond time: endl; myClock.setTime(16,10,28);/ 设置时间为 16:10:28 myClock.showTime();/ 显示时间 system(pause); return 0; 程序示例 ex_class_01.cpp 24 主要内容n 面向对象的基本特点n 类和对象n 构造函数和析构函数n 类的组合n 结构体与联合体 25 构造与析构函数构造函数:负责对象初始化类与对象的关系类似于基本数据类型与普通变量之间的关系不

14、同对象之间的主要区别:名称与数据对象的初始化:定义对象时,设置数据成员的值析构函数:在特定对象使用结束后,经常需要进行一些清理工作,这部分工作就有析构函数负责构造函数与析构函数是对象的两个特殊的成员函数 26 构造函数q 构造函数l 构造函数的函数名与类的名称相同;l 构造函数没有返回值;l 构造函数在对象创建时会被系统自动调用。l 若没有构造函数,编译器会自动产生出构造函数 (形参和函数体都为空,如:Clock() ) l 可以是内联函数、带默认形参值或函数重载l 对象创建的过程 申请内存空间 (只存放数据成员) 初始化:调用构造函数 27 class Clock public: Clock

15、(int x, int y, int z); / 构造函数 void setTime(int NewH=0, int NewM=0, int NewS=0); void showTime(); private: int hour, minute, second;/ 构造函数的定义Clock:Clock(int x, int y, int z) hour=x; minute=y; second=z; . .构造函数示例构造函数前不能加数据类型或void! 28 int main Clock c1(0,0,0); / 声明对象并初始化 c1.showTime(); c1.setTime(16,10

16、,28); Clock c2; / ERROR return 0;构造函数示例ex_class_02.cpp 29 class Clock public: void Clock(int x, int y, int z); / 构造函数 void Clock() hour=0; minute=0; second=0; / 函数重载 void setTime(int NewH=0, int NewM=0, int NewS=0); void showTime(); private: int hour, minute, second; . .构造函数示例ex_class_03.cpp思考:如何显示时

17、间 16:30:00 30 复制构造函数复制构造函数:一类特殊的构造函数,用已有的对象去初始化新的对象。l 若没有定义复制构造函数,系统会在必要时自动生成一个, 功能就是将已有对象的数据成员全部复制到新建立的对象中。class 类名 public: 类名(形参列表); / 构造函数 类名(类名 / 复制构造函数; . .;类名(类名 31 示例class Point/Point 类的声明 public:/外部接口Point(int x0=0, int y0=0) x=x0; y=y0; / 构造函数Point(Point / 复制构造函数int Getx() return x;int Gety

18、() return y; private:/ 私有数据int x, y; Point:Point(Point x=p.y; cout 复制构造函数被调用! endl;. . 32 复制构造函数普通构造函数在对象建立时被自动调用,而复制构造函数在以下三种情况下会被调用:(1)用一个对象去初始化另一个同类的对象时int main Point a(1,2); Point b(a); / 用 a 初始化 b,构造函数被调用 Point c=a; / 用 a 初始化 c,构造函数被调用 cout b.getx() endl; return 0;以上两种方式只是写法上不同,执行的操作完全相同 33 复制构

19、造函数(2)若函数的形参是类的对象,调用函数时形参与实参的结合viod f(Point p) cout p.getx() endl; 只有在进行值传递时,复制构造函数才会被调用;若传递的是引用,则不会调用复制构造函数。因此传递比较大的对象时,传递引用效率要高。(3)若函数返回值是类的对象,函数执行完后返回主调函数时Point g() Point A(1,2); return A; int main Point b; b=g(); / ? return 0;ex_class_04.cpp 34 析构函数析构函数:负责对象被删除时的一些清理工作。l 析构函数的函数名由类名前加 “” 组成l 析构函

20、数没有返回值l 析构函数在对象生存期即将结束时被自动调用l 析构函数不接收任何参数l 若没有析构函数,系统会自动生成一个析构函数 (函数体都为空,如:Point() ) 35 应用实例例:一圆形游泳池如图所示,现在需在其周围建一圆形过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。游泳池过道分析:可以定义一个类:圆。数据成员:圆的半径;函数成员:计算周长与面积; 36 应用实例class Circle/ 声明类 Circle public:/ 外部接口 Circle(float x) r=x; /

21、 构造函数 float Circum();/ 计算圆周长 float Area();/计算圆面积 private:/私有数据成员 float r;/ 成员函数 float Circle:Circum()/ 计算圆的周长 return 2*pi*r; float Circle:Area()/ 计算圆的面积 return pi*r*r; 37 应用实例int main () float x, y, z; cout x; Circle Pool(x); / 声明 Circle 对象 Circle PoolRim(x+3); / 计算栅栏造价并输出 y=PoolRim.Circum()*price1;

22、 cout 栅栏造价为: y endl; / 计算过道造价并输出 z=(PoolRim.Area()-Pool.Area()*price2; cout 过道的造价为: z endl; return 0; ex_class_05.cpp 38 主要内容n 面向对象的基本特点n 类和对象n 构造函数和析构函数n 类的组合n 结构体与联合体 39 类的组合类的组合:将已有的类的对象作为新的类的成员。class Point/ 声明Point类 public: . . private: int x, y; class Line/ 声明Line类 public: . . private: Point p1

23、, p2;例: 40 初始化l 在创建类的对象时,如果这个类包含其它类的对象(内嵌对象成员),则各个内嵌对象将首先被自动创建l 初始化时需要对每个内嵌对象成员进行初始化q 组合类构造函数的一般形式类名:类名(形参):内嵌对象1(形参),内嵌对象2(形参),. 类的初始化 l “内嵌对象1(形参),内嵌对象2(形参),.” 为初始化列表,其作用是对内嵌对象进行初始化 l 除了自身的构造函数外,内嵌对象的构造函数也被调用l 构造函数调用顺序: 按内嵌对象在组合类的定义中出现的顺序依次调用内嵌对象的构造函数 最后调用本类的构造函数 l 析构函数的调用顺序与构造函数相反 41 前向引用声明l 类必须先

24、定义后使用l 若两个类互相引用,则需要使用前向引用声明class B;/ 前向引用声明class A / 声明 A 类 public: void f(B b); ; class A/ 声明 B 类 public: void g(A a); ;例:l 使用前向引用声明时,只能使用被声明的符号,而不能涉及类的任何细节 42 UMLl 详见相关资料(略)UML:Unified Modeling Language面向对象建模语言,通过图形的方式描述面向对象程序设计。 43 主要内容n 面向对象的基本特点n 类和对象n 构造函数和析构函数n 类的组合n 结构体与联合体 44 结构体结构体:(struct

25、)一种特殊形态的类,为了保持与 C 语言程序的兼容性。q 结构体的定义struct 结构体名称 public:公有成员 private:私有成员 protected:保护型成员 ; 45 结构体q 结构体与类的唯一区别:在类中,对于未指定访问控制属性的成员,默认为私有成员;而在结构体中,未指定访问控制属性的成员,默认为公有成员。C+ 中的结构体可以含数据成员和函数成员,而 C 语言中的结构体只能含数据成员。 46 联合体l 联合体的所有成员共享一个存储单元联合体:(union)一种特殊形态的类,从 C 语言继承而来。union Mark char grade; / 等级制 bool pass; / 是否通过 int score; / 百分制;例:l 联合体的所有成员中同时至多一个有意义l 联合体中成员的默认访问控制属性是公有类型 l 联合体一般只存数据,不含函数成员

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!