C面向对象程序设计-第2章-类和对象(一)课件.ppt

上传人(卖家):晟晟文业 文档编号:4300940 上传时间:2022-11-27 格式:PPT 页数:38 大小:923KB
下载 相关 举报
C面向对象程序设计-第2章-类和对象(一)课件.ppt_第1页
第1页 / 共38页
C面向对象程序设计-第2章-类和对象(一)课件.ppt_第2页
第2页 / 共38页
C面向对象程序设计-第2章-类和对象(一)课件.ppt_第3页
第3页 / 共38页
C面向对象程序设计-第2章-类和对象(一)课件.ppt_第4页
第4页 / 共38页
C面向对象程序设计-第2章-类和对象(一)课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第2章 类和对象(一)类对象构造函数析构函数一个对象的生存期对象浅复制与深复制静态成员类成员指针应用实例练习题2上机实验题2类类的声明类的组织形式类的作用域类的成员函数类的访问权限类与结构体类型的区别类的特点u 类的声明类是一种用户自定义的数据类型,声明类的一般格式如下:class 类名private:私有数据成员和成员函数;protected:保护数据成员和成员函数;public:公有数据成员和成员函数;各个成员函数的实现;类界面类实现在声明类时有如下规则:如果类的成员是变量,可以像声明变量一样声明它。如果类的成员是函数,一般是使用函数原型来声明它。如果类的成员是函数,它可以访问类中的任何成

2、员数据成员和成员函数。也就是说,当声明类的成员函数时,定义的函数可以直接访问该类中任何成员而无需将其声明为参数,惟一的限制条件是在使用一个成员之前必须声明它。u 类的组织形式 通常将类界面与类实现分离,将类界面部分存放在头文件(.h)中,将类实现放在程序文件(.cpp)中,而使用类的程序放在另一个程序文件中,这样使整个程序更清晰。例如,声明类C的类界面的部分用c.h文件保存,类实现部分用c.cpp文件保存,而使用类C的部分用a.cpp保存,如图所示。u 类的作用域 声明类时所使用的一对大括号()形成了类作用域。在类作用域中声明的标识符只在该类中具有可见性,并且其作用域与该标识符声明的次序无关。

3、类作用域包括了类中成员函数的作用域,即使该成员函数的实现放在类的外面也是如此。所以当成员函数的函数体中使用一个标识符时,编译系统首先在成员函数中寻找其声明,如果未找到则在该成员函数所在的类中寻找,如果还未找到,则在包含类作用域的更大作用域中作最后寻找。u 类的成员函数 类的成员函数用于实现某种操作,成员函数的定义体可以在类的声明体中,也可以在类的说明体外。在类声明体中实现的函数是内联函数。在类声明体外实现的函数可以通过在函数声明和定义上分别加上inline来表示该函数是内联的,否则不是内联函数。在类的声明体内定义成员函数的优点是使整个类集中于程序代码的同一位置上,不利的方面是增加了类声明的规模

4、和复杂性,而且,内联的函数代码并不被相同类的对象所共享,因而增大了程序的内存开销。u 类的访问权限 在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。在C+中,有关类的访问权限的其他规定如下:在默认的情况下,一个类中所有的成员都是私有的。一旦给出了成员访问限定符(如public:),它后面的成员都具有这个成员访问权限(如后面的成员均为公有的),直到出现另一个成员访问限定符或类声明结束为止。u 类与结构体类型的区别 从类的声明格式可以看出,类与结构体类型是非常相似的。C+中类是由结构体类型演化而来的,但对结构体类

5、型进行了扩展。类的成员可以是数据成员或成员函数,结构体中的成员也可以是数据成员或函数成员。并且在结构体中,也可以使用关键词public、private、protected限定其成员的访问权限。实际上,结构体只是类的一个特例。结构体与类惟一区别在于:在类中,其成员的默认访问权限是私有的,而在结构体类型中,其成员的默认访问权限是公有的。当只需要描述数据结构时,使用结构体较好。当需要描述数据又需要描述对数据的处理方法时使用类为好。u 类的特点类具有如下特点。(1)类具有封装性(2)类具有安全性(3)类具有独立性与可维护性(4)类具有继承性(5)类具有多态性对象对象的定义格式对象的数据成员访问方法对象

6、的成员函数调用方法对象的存储空间对象的赋值运算u 对象的定义格式 一旦声明了一个类,就可以用它作为数据类型来定义类对象(简称为对象)。在C+中,类对象也称为类变量或者类实例。定义类对象的格式如下:类名 对象名表;其中,“类名”是待定的对象所属的类的名字,即所定义的对象是该类的对象。“对象名表”中可以有一个或多个对象名,多个对象名之间用逗号分隔。在“对象名表”中,可以是一般的对象名,还可以是指向对象的指针变量名(即对象指针)、引用名(即对象引用)、对象数组名。u 对象的数据成员访问方法对象的数据成员的访问方式如下:对象名.数据成员名其中,“.”是一个运算符,该运算符的功能是表示对象的成员。u 对

7、象的成员函数调用方法 成员函数的调用是为了响应发送对象的消息。消息对应于从一个对象向另一个对象或者从一个函数向一个对象发送的成员函数调用。调用对象的成员函数的方式如下:对象名.成员名(参数表)u 对象的存储空间 实际上,C+只为每一个对象的数据成员分配内存空间,类中的所有成员函数只生成一个副本,而该类的每个对象执行相同的函数成员副本。因此在描绘类图时,通常将显示类中所有的成员。然而在描绘类的对象图时,将只显示其数据成员。实际上,类对象也像变量一样,可以定义全局对象或静态对象等,它们的存储空间类型和作用域与全局变量或静态变量是一样的。u 对象的赋值运算 在定义了一个类的多个对象时,可以在对象之间

8、进行赋值运算,也称为对象复制,假设定义了例2.1中类MyClass的两个对象sa1和sa2,它们的值如图所示。构造函数什么是构造函数调用构造函数重载构造函数复制构造函数u 什么是构造函数C+提供了利用类的构造函数来初始化类的数据成员。构造函数具有如下性质:构造函数的名字与类的名字相同。构造函数尽管是一个函数,但没有任何类型,即它既不属于返回值函数也不属于void函数。类可以有多个构造函数。然而,一个类的所有构造函数的名字都相同。如果类有多个构造函数,则它们的参数是各不相同的。当类对象创建时,构造函数会自动地执行;由于它们没有类型,不能像其他函数那样进行调用。当类对象说明时调用哪一个构造函数取决

9、于传递给它的参数类型。u 调用构造函数 当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。1.1.调用默认构造函数调用默认构造函数假设一个类包含有默认构造函数,调用默认构造函数的语法如下:类名 类对象名;2 2调用带参数的构造函数调用带参数的构造函数假设一个类中包含有带参数的构造函数,调用这种带参数的构造函数的语法如下:类名 类对象名(参数表)其中,“参数表”中的参数可以是变量,也可以是表达式。3.3.调用内置数据类型的构造函数调用内置数据类型的构造函数实际上,C+中内置的数据类型都可以看成是类,定义变量时除了可以使用

10、“=”运算符赋初值外,还可以像定义类对象一样调用其构造函数给变量赋初值。4.4.用用newnew动态创建对象动态创建对象 可以用new运算符来动态地建立对象。用new运算符建立对象时,同样也要自动调用构造函数,以便完成对象数据成员的初始化。5.5.用构造函数初始化对象的过程用构造函数初始化对象的过程 构造函数初始化对象的过程,实际上就是对构造函数的调用过程。一般情况下按如下步骤进行:(1)程序执行到定义对象语句时,系统为对象分配内存空间。(2)系统自动调用构造函数,将实参传送给形参,执行构造函数体时,将形参值赋给对象的数据成员。完成数据成员的初始化工作。u 重载构造函数 构造函数可以像普通函数

11、一样被重载,C+根据声明中的参数个数和类型选择合适的构造函数。u 复制构造函数 复制构造函数常用于将一个已知对象的数据成员复制给正在创建的另一个同类的对象。除此之外,复制构造函数可以像其他构造函数一样定义和使用。复制构造函数的格式如下:类名:复制构造函数(类名&引用名)或:类名:复制构造函数(const 类名&引用名)在以下3种情况下,复制构造函数都会自动被调用:当说明一个类的对象时,使用另外一个对象来初始化(此时复制构造函数就如同其他构造函数一样使用)。当一个函数返回值为类类型时。当一个类类型的实参传递给函数中的传值调用参数时,在这种情况下,复制构造函数决定了参数按照什么方式传递。析构函数什

12、么是析构函数析构函数的性质析构函数的调用u 什么是析构函数 同构造函数一样,析构函数也是类的特殊成员函数,不用调用便自动执行,而且析构函数的名字也与类的名字有关。C+程序设计的一个原则是:由系统自动分配的内存空间由系统自动释放。u 析构函数的性质析构函数具有如下性质:析构函数在类对象销毁时自动执行。一个类只能有一个析构函数,而且析构函数没有参数。析构函数的名字是“”加上类的名字(中间没有空格)。与构造函数一样,析构函数也没有任何类型,即不属于返回值函数也不属于void函数。它们不能像其他函数那样被调用。u 析构函数的调用析构函数被系统自动调用时分为以下两种情况。1.1.用类直接建立对象用类直接

13、建立对象 在程序执行过程中,当遇到对象的生存期结束时,系统自动调用析构函数,然后回收为对象所分配的存储空间。2.2.用用newnew动态创建对象动态创建对象 对于用new运算符动态创建的对象,在产生对象时调用构造函数,只有用delete 释放对象时,才调用析构函数。若不使用delete 运算符来撤销动态生成的对象,程序结束时对象仍存在,并占用相应的存储空间,即系统不能自动撤销动态创建的对象。一个对象的生存期 如同一个变量一样,对象从被创建到被释放为止的时间称为对象的生存期。一个对象的生存期如图所示。对象浅复制与深复制对象浅复制对象深复制u 对象浅复制 当两个对象之间进行复制时,若复制完成后,它

14、们还共享某些资源(内存空间),其中一个对象的销毁会影响另一个对象,这种对象之间的复制称为对象浅复制。u 对象深复制 当两个对象之间进行复制时,若复制完成后,它们不会共享任何资源(内存空间),其中一个对象的销毁不会影响另一个对象,这种对象之间的复制称为对象深复制。静态成员静态数据成员静态成员函数u 静态数据成员 静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,也就是说静态数据成员的存储空间不是放在每个对象中,而是和成员函数一样放在类公共区中。所以有时将静态数据成员称为类变量。因为静态数据成员不从属于任何一个具体对象,所以必须对它初始化,而且对它的初始化不能在构造函数中进行。静态数据成

15、员的使用方法如下:(1)静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。当数据成员的一个副本就已经足够时,可使用static数据成员来节省存储空间。(2)静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下:类型 类名:静态数据成员=值;(3)在引用静态数据成员时采用格式类名:静态数据成员u 静态成员函数 静态成员函数与静态数据成员类似,也是从属于类,都是类的静态成员。只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数定义前加上static关键字。调用静态成员函数的格式如下:类名:静态成员函数名(参数表);类成员指针类数据成员指针类成员函数

16、指针u 类数据成员指针类数据成员指针的定义格式如下:类型 类名:*指针名 由于类不是在运行时存在的对象,因此在使用类数据成员指针时,需要首先指定类的一个数据成员,然后通过类的对象来引用指针所指向的成员。u 类成员函数指针指向类成员函数指针的定义格式如下:类型(类名:*指针名)(参数表)给类成员函数指针赋值的格式如下:指向函数的指针名=函数名程序中使用指向函数的指针调用函数的格式如下:(*指向函数的指针名)(实参表)应用实例编写一个程序,设计一个满足如下要求的编写一个程序,设计一个满足如下要求的CDateCDate类,用数据进行调试类,用数据进行调试并输出结果:并输出结果:(1)用日/月/年格式

17、输出日期。(2)可进行日期加一天的操作。(3)设置日期。练习题2给出以下程序的执行结果。#include class Sample int x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b;Sample()if(x=y)cout x=y endl;else cout x!=y endl;void disp()cout x=x ,y=y endl;void main()Sample s1(2,3);s1.disp();上机实验题2 设计一个词典类Dic,其中包含若干单词信息,每个单词由英文单词及对应的中文含义组成。并含有单词增加和英汉翻译成员函数,通过查词典的方式将一段英语翻译成对应的汉语。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C面向对象程序设计-第2章-类和对象(一)课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|