C++面向对象程序设计第三章类与对象课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++面向对象程序设计第三章类与对象课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 第三 课件
- 资源描述:
-
1、学习目标学习目标 (1 1)理解类的概念,掌握类的定义方法)理解类的概念,掌握类的定义方法(2 2)理解对象与类的关系,掌握对象的创建和使用方法)理解对象与类的关系,掌握对象的创建和使用方法(3 3)掌握构造函数、析构函数的概念和使用方法)掌握构造函数、析构函数的概念和使用方法(4 4)掌握拷贝构造函数的使用方法)掌握拷贝构造函数的使用方法(5 5)掌握对象数组和对象指针的特点和使用方法)掌握对象数组和对象指针的特点和使用方法(6 6)掌握函数调用中参数的传递方式)掌握函数调用中参数的传递方式(7 7)理解类的组合的特点)理解类的组合的特点3.1 3.1 类类和对象的概念和对象的概念 类是对类
2、是对一组具有共同属性特征和行为特征的实体一组具有共同属性特征和行为特征的实体(对象)的抽象,它将相关数据及对这些数据的操作(对象)的抽象,它将相关数据及对这些数据的操作组合在一起组合在一起。 对象对象是封装了数据和可以施加在这些数据上的操是封装了数据和可以施加在这些数据上的操作的封装体,它是类的实际变量,即类的实例。作的封装体,它是类的实际变量,即类的实例。3.1.1类的基本概念 类类(classclass)是面向对象系统中最基本的组)是面向对象系统中最基本的组成元素,是一种自定义数据类型。在成元素,是一种自定义数据类型。在C+C+中,类是中,类是一些具有相同属性和行为的对象的抽象。一些具有相
3、同属性和行为的对象的抽象。3.1.2对象的基本概念 对象对象是某个特定类所描述的实例。现实世界是某个特定类所描述的实例。现实世界中的任何一种事物都可以看成一个对象中的任何一种事物都可以看成一个对象(Object)(Object),即万物皆对象。即万物皆对象。3.2 3.2 类的定义类的定义 类类的定义包括两部分:类头和类体的定义包括两部分:类头和类体。 类类头由关键字头由关键字“classclass”及其后面的类名构成及其后面的类名构成; 类类体用于对类的数据成员和成员函数进行声明,体用于对类的数据成员和成员函数进行声明,并指定相应成员的访问级别并指定相应成员的访问级别。3.2.1类的定义格式
4、class 类名类名 private: 数据成员或成员函数数据成员或成员函数 protected: 数据成员或成员函数数据成员或成员函数 public: 数据成员或成员函数数据成员或成员函数;说明:说明: (1 1)classclass是声明类的关键字,是声明类的关键字,classclass后跟类名。类名后跟类名。类名的首字符通常采用大写字母。的首字符通常采用大写字母。 (2 2)类的成员包括数据成员和成员函数两类。)类的成员包括数据成员和成员函数两类。 (3 3)类声明中的)类声明中的privateprivate、protectedprotected和和publicpublic关键字关键字称
5、为访问权限符,它规定了类中成员的访问属性。称为访问权限符,它规定了类中成员的访问属性。 (4 4)在)在C+C+中,由于类是一种数据类型,系统不会为中,由于类是一种数据类型,系统不会为其分配存储空间,所以不能在类声明中给数据成员赋初值。其分配存储空间,所以不能在类声明中给数据成员赋初值。 (5 5)类声明完成后一定要以)类声明完成后一定要以“; ;”结束。结束。 【例【例3-13-1】声明一个学生类】声明一个学生类 分析:每个学生都有学号、姓名和性别;对分析:每个学生都有学号、姓名和性别;对于学生的基本操作有输入、输出信息等。于学生的基本操作有输入、输出信息等。class Student /声
6、明类 private: /访问权限:私有成员 char studentNo10; /属性,数据成员,表示学号 char studentName20; /属性,数据成员,表示姓名 char studentSex6; /属性,数据成员,表示性别 public: /访问权限:公有成员 Student(); /行为,成员函数的原型声明,表示构造函数 void input(); void print(); ; /类声明结束3.2.2类的成员 对于对于C+C+,类中共有两类成员,类中共有两类成员: 1 1)代表代表对象属性的数据对象属性的数据成员成员 2 2)代表代表实现对象行为的成员实现对象行为的成员函
7、数函数3.2.3类成员访问控制权限 publicpublic(公有类型)、(公有类型)、privateprivate(私有类型)和(私有类型)和protectedprotected(保护类型)(保护类型)。 1 1、publicpublic(公有类型)(公有类型) public public声明成员为公有成员。具有这个访问控制声明成员为公有成员。具有这个访问控制级别的成员是完全公开的,即该成员不但可以被它所级别的成员是完全公开的,即该成员不但可以被它所在类的成员函数及该类的友元函数访问,而且也可以在类的成员函数及该类的友元函数访问,而且也可以被和该类对象处在同一作用域内的任何函数访问。被和该类
8、对象处在同一作用域内的任何函数访问。 【例【例3-23-2】具有】具有publicpublic访问权限的成员的应用访问权限的成员的应用#include #include stdafx.hstdafx.h # #includeiostreamincludeiostream using namespace using namespace stdstd; ;class class LimitLimitpublicpublic: : /声明类的公有成员声明类的公有成员 char name30;char name30; void accept()void accept() coutcoutn Enter
9、 your name; name; /类的成员函数访问类类的成员函数访问类的的公公有有数据成员数据成员 coutcoutn Your name is:namen Your name is:nameendlendl; ; ;void main()void main() Limit Limit c; c; /定义类的对象定义类的对象 c.acceptc.accept(); (); /通过对象访问类的公有成员函数通过对象访问类的公有成员函数 coutcoutc.namec.nameendlendl; ; /通过对象访问类的公有数据成员通过对象访问类的公有数据成员说明:说明: (1 1)在一个项目中的
10、每一个)在一个项目中的每一个. .cppcpp文件都包含有大量文件都包含有大量的相同的的相同的MFCMFC(Microsoft Foundation Class Library)标准标准头文件,这些头文件,这些头文件头文件一般都不会改变,并且一般都不会改变,并且都都非常大,即非常大,即使有一个快速的处理程序,完成其编译也要花费相当长的使有一个快速的处理程序,完成其编译也要花费相当长的时间时间。因此因此,对这些头文件进行预先编译,以后该工程编,对这些头文件进行预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果,译时,不再编译这部分头文件,仅仅使用预编译的结果,就可以节省大量的
11、编译时间。就可以节省大量的编译时间。“stdafx.hstdafx.h”文件中就包含文件中就包含了这些必要的标准头文件。了这些必要的标准头文件。#include #include stdafx.hstdafx.h 的作用的作用就是令编译器编译出一个就是令编译器编译出一个stdafx.objstdafx.obj预编译头文件。因此,预编译头文件。因此,一般一般. .cppcpp文件的第一条语句都是文件的第一条语句都是#include #include stdafx.hstdafx.h 。 (2 2)在)在C+C+中,中,_tmain_tmain是主函数名(也可以与是主函数名(也可以与c c一样是一
12、样是mainmain),每一个项目中有且仅有一个主函数,它表示程序),每一个项目中有且仅有一个主函数,它表示程序执行的开始点。执行的开始点。 2 2、privateprivate(私私有类型)有类型) private private声明成员为私有成员。具有这个访问声明成员为私有成员。具有这个访问控制级别的成员对类外是完全保密的,即只能被控制级别的成员对类外是完全保密的,即只能被它所在类中的成员函数和该类的友元函数访问。它所在类中的成员函数和该类的友元函数访问。【例【例3-33-3】具有】具有privateprivate访问权限的成员的应用访问权限的成员的应用#include #include
13、stdafx.hstdafx.h # #includeiostreamincludeiostream using namespace using namespace stdstd; ; class Limitclass Limitprivate: private: /声明类的私有成员声明类的私有成员 float float imprestimprest; ; void void warning()warning() coutcoutWarning!; Warning!; public: public: /声明类的公有成员声明类的公有成员 void accept() void accept()
14、coutcoutn Enter your imprestimprest; ; coutcoutn Your n Your imprestimprest is:t is:timprestimprest; ; / /类的私有数据成员可以被本类的成员函数访问类的私有数据成员可以被本类的成员函数访问 void display()void display() coutcoutn Now ,your n Now ,your imprestimprest is:t is:timprestimprest; ; warning warning();();/类的私有成员函数可以被本类的成员函数访问类的私有成员函数
15、可以被本类的成员函数访问 ;void main()void main() Limit Limit c;c; c.acceptc.accept(); (); c.displayc.display();(); c.imprestc.imprest=3.3f;=3.3f; /错误,不能通过对象访问类的私有数据成员错误,不能通过对象访问类的私有数据成员 c.warningc.warning(); (); /错误,不能通过对象访问类的私有成员函数错误,不能通过对象访问类的私有成员函数 3 3、protectedprotected(保护类型)(保护类型) protected protected声明成员为保
16、护成员。具有这个访声明成员为保护成员。具有这个访问控制级别的成员,外界是无法直接访问的。它问控制级别的成员,外界是无法直接访问的。它只能被它所在类及从该类派生的子类的成员函数只能被它所在类及从该类派生的子类的成员函数及友元函数访问。及友元函数访问。例【例【3-43-4】具有】具有protectedprotected访问权限的成员的应用访问权限的成员的应用#include stdafx.h#include stdafx.hclass Limitclass Limit protected: protected: /声明类的保护成员声明类的保护成员 float imprest; float impr
17、est; void warning() void warning() coutWarning!; coutimprest; /类的保护数据成员可以被本类的成员函数访问 coutn Your imprest is:timprest; ;class Extends:public Limit class Extends:public Limit /声明类声明类LimitLimit的派生类的派生类ExtendsExtends public:public: void ext_display() void ext_display() coutn the display of extends class i
18、s:; coutn the display of extends class is:; warning(); warning(); /访问从基类继承的保护成员函数访问从基类继承的保护成员函数 ;void main() Limit c; Limit c; c.accept(); c.accept(); c.imprest; c.imprest; /错误类的对象不能访问类的保护数据成员错误类的对象不能访问类的保护数据成员 c.warning; c.warning;/错误类的对象不能访问类的保护成员函数错误类的对象不能访问类的保护成员函数 publicpublic、protectedprotecte
19、d和和privateprivate三种类成员的可访问性三种类成员的可访问性访问限定符自身的类成员是否可访问子类的类成员是否可访问自身的类对象是否可访问publicprotectedprivate3.2.4成员函数的实现方式 类的成员函数也是函数的一种,它与一般函类的成员函数也是函数的一种,它与一般函数的区别是:它属于一个特定的类,并且它必须数的区别是:它属于一个特定的类,并且它必须被指定为被指定为privateprivate、publicpublic或或protectedprotected三种访问三种访问权限中的一种。权限中的一种。 在使用类的成员函数时,要注意它的访问权在使用类的成员函数时,
20、要注意它的访问权限限( (它能否被访问它能否被访问) ),以及它的作用域,以及它的作用域( (类函数能在类函数能在什么范围内被访问什么范围内被访问) )。 类的成员函数的定义方式有两种类的成员函数的定义方式有两种: : 第一种方式是在类中进行函数原型说明,而第一种方式是在类中进行函数原型说明,而函数体则在类外进行定义。函数体则在类外进行定义。 采用这种方式定义类函数时,必须用作用域采用这种方式定义类函数时,必须用作用域符符“:”表明该函数所属的类。表明该函数所属的类。返回类型返回类型 类名类名:函数名(参数列表)函数名(参数列表) /函数体函数体【例例3-53-5】定义时钟类。】定义时钟类。#
21、include #include stdafx.hstdafx.h #include #include iostreamiostream using namespace using namespace stdstd; ;class Clockclass Clock private: private: intint hour,minute,secondhour,minute,second; ; public: public: void void setTimesetTime( (intint newH,intnewH,int newM,intnewM,int newSnewS); ); /函数原
22、型说明函数原型说明 void void showTimeshowTime(); (); /函数原型说明函数原型说明 ; ; void Clock:setTime(int newH,int newM,int void Clock:setTime(int newH,int newM,int newS) newS) /定义成员函数定义成员函数 hour=newH; hour=newH; minute=newM; minute=newM; second=newS second=newS 说明:说明: (1 1)在定义成员函数时,对函数所带的参数,)在定义成员函数时,对函数所带的参数,既要说明其类型,也
23、要指出参数名;既要说明其类型,也要指出参数名; (2 2)在定义成员函数时,其返回值必须与函)在定义成员函数时,其返回值必须与函数原型声明中的返回类型相同。数原型声明中的返回类型相同。 第二种方式是在类内直接进行定义。这种方第二种方式是在类内直接进行定义。这种方式一般用在代码比较少的成员函数。式一般用在代码比较少的成员函数。3.2.5成员函数设置为内联函数 一般的函数使用过程中,需要进行函数调用,由于在一般的函数使用过程中,需要进行函数调用,由于在调用函数时,需要保存现场和返回地址、进行参数传递,调用函数时,需要保存现场和返回地址、进行参数传递,再转到子函数的代码起始地址去执行。子函数执行完后
24、,再转到子函数的代码起始地址去执行。子函数执行完后,又要取出以前保存的返回地址和现场状态,再继续执行。又要取出以前保存的返回地址和现场状态,再继续执行。 内联函数与一般函数的区别在于它不是在调用时发生内联函数与一般函数的区别在于它不是在调用时发生控制转移,而是在编译时将函数体嵌入到每一个调用处。控制转移,而是在编译时将函数体嵌入到每一个调用处。这样就节省了参数传递、控制转移等开销。这样就节省了参数传递、控制转移等开销。内联函数的定义格式为:内联函数的定义格式为: inline 返回值类型返回值类型 函数名(形参列表)函数名(形参列表) /函数体函数体 说明:说明:(1 1)内联函数体内不能含有
25、循环语句和)内联函数体内不能含有循环语句和switchswitch语句;语句;(2 2)内联函数的定义必须出现在第一次被调用之前;)内联函数的定义必须出现在第一次被调用之前;(3 3)对内联函数不能进行异常接口声明)对内联函数不能进行异常接口声明。 内联函数实际上是一种以空间换时间的方案,内联函数实际上是一种以空间换时间的方案,其缺点是加大了空间方面的开销。它通常用在结其缺点是加大了空间方面的开销。它通常用在结构简单、语句少、使用多的情况下。构简单、语句少、使用多的情况下。 C+ C+默认在类内给出函数体定义的成员函数为默认在类内给出函数体定义的成员函数为内联函数。内联函数。【例【例3-63-
展开阅读全文