第7章 类和对象.ppt
《第7章 类和对象.ppt》由会员分享,可在线阅读,更多相关《第7章 类和对象.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1C+程序设计程序设计第第7 7章章类和对象类和对象2 2面向对象程序设计面向对象程序设计 类的定义类的定义对象的定义对象的定义 对象的初始化对象的初始化 成员函数的特性成员函数的特性 对象数组对象数组对象指针对象指针 静态成员静态成员 常对象常对象子对象子对象 友元函数与友元类友元函数与友元类主主 要要 内内 容容3 31 1、面向对象程序设计面向对象程序设计1 1 1 1、面向对象的基本概念、面向对象的基本概念、面向对象的基本概念、面向对象的基本概念类是对某一类对象的抽象,而对象是某一种类的实例。因此,类和对象是密切相关的。没有脱离对象的类,当然也没有不依赖于类的对象,类是对现实世界的
2、抽象得到的。当我们把现实世界分解为一个个的对象,解决现实世界问题的计算机程序也与此相对应,由一个个对象组成,这些程序就称为面向对象的程序,编写面向对象程序的过程就称为面向对象的程序设计(Object-Oriented Programming,简称为OOP)。4 42 2 2 2、面向对象程序设计的特点、面向对象程序设计的特点、面向对象程序设计的特点、面向对象程序设计的特点 面向对象程序设计面对的是一个个对象。其中每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。程序设计者的任务包括:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对
3、象发送消息,以完成所需的任务。对一个大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。5 5)封装与信息隐蔽封装与信息隐蔽封装与信息隐蔽封装与信息隐蔽 对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可知的。其好处是大大降低了操作对象的复杂程度。封装:封装:封装:封装:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。6 6 这种对外界隐蔽的做法称为信息隐蔽(inf
4、ormation hiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。对程序设计而言,封装性使对象内部的实现与外界隔离,提供了更理想的模块化机制,减少了程序间的相互干扰。7 7 )继承与重用继承与重用继承与重用继承与重用类具有层次性,即一个类的上层有父类,下层有子类,一个类继承了父类的某些特性,这种继承具有传递性。继承是一种连接类与类的层次模型,利用现有的类派生出新的类的过程称为类的继承,新类(子类)拥有原有类(父类)的特性,又增加了自身新的特性。设计程序时只需对新增的内容或对原内容修改设计代码,除了共享机制外,继承还有传递机制,即下层的子类可以继承各层父类的全部特性。8 8
5、)多态性多态性多态性多态性如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这就是多态现象。(在Windows下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。)多态性多态性(polymorphism)是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。9 9面向对象的程序设计是以类和对象为基础的,程序的操作是围绕对象进行的,在此基础上利用了继承机制和多态
6、性等。面向过程的结构化程序设计中,常用以下公式来表述程序:程序程序=算法数据结构算法数据结构面向对象程序设计就是把一个算法和一组数据结构封装在一个对象中。因此就形成了新的观念:对象=算法 数据结构程序=(对象+对象+对象+)+消息 或:程序=对象s+消息面向对象程序设计的特点面向对象程序设计的特点1010类是面向对象程序设计的核心。类是对某一类对象的抽象,而对象是某一种类的实例。在现实中,类是对一组客观对象的抽象,它将该组对象所具有的共同特征(包括属性和服务)封装起来,以说明该组对象的能力和性质。在系统中,类(class)是一种用户自定义的数据类型。通过类使得现实中的抽象实体在程序中直接表示为
7、一个标识符,并可以进行引用和操作。这使得程序中的概念与应用中的概念相互比较一致和对应。2 2、类的定义类的定义 11111 1、类的定义格式、类的定义格式 类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。实现部分是用来对成员函数的定义。概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。1212类的一般定义格式如下:类的一般定义格式如下:class public:private:protected:;1313【例7.1】定义一个Clock时钟类 classClockpublic:voidinit();/初始化
8、时间voidupdate();/当改变时间时刷新时间数据 voiddisplay();/显示时间private:inthour,minute,second;/时,分,秒;/别忘了“”后面的“;”!14142 2、定义类时应注意的事项、定义类时应注意的事项 在说明部分中,class是定义类类型的关键字,Clock是类名,通常用大写字母开始的字符串作为类名。花括号内是类的说明部分,说明该类包含哪些数据成员和哪些成员函数。类中的数据成员的类型可以是任意的,包含整型、浮点型、字符型、整型、浮点型、字符型、数组、指针和引用数组、指针和引用等。同时另一个类的对象,可以作该类的成员。当一个类的对象作为这个类
9、的成员时,如果另一个类的定义在后面,需要提前说明。在类体中不允许对所定义的数据成员进行初始化,因为类的定义只是在创造一个类型而已,而不是在说明“变量”。相当于先设计好一个模具(类),之后才可用模具来生产产品(对象)。15153 3、类成员函数的实现、类成员函数的实现 类的成员函数是对类内中数据的操作,同时作为外部数据成员的接口,代表了类的对象的行为。这些函数可以定义在类的内部,也可以定义在类体的外部。在类的内部定义的成员函数叫内联函数,在类的外部定义的成员函数叫外联函数。在类的外部定义的成员函数需要在函数名的前面加Clock:,称为成员名限定。其中“:”称为作用域运算符。1616 在类体外定义
10、成员函数的格式如下:在类体外定义成员函数的格式如下:返回值的类型返回值的类型 :(参数表)(参数表)函数体函数体 如:voidClock:display()couthour:minute:secondendl;17173 3、对象的定义对象的定义对象的定义格式对象的定义格式对象成员的表示方法对象成员的表示方法1818对象的定义格式如下对象的定义格式如下:例如:给上述时钟类定义对象:ClockclockA,clockB;/定义两个对象Clock*pclockA;/定义对象指针ClockclockD5;/定义对象数组 其中,是对象所属的类的名字,即所定义的对象是该类类型的对象。中可以有一个或多个对
11、象名,多个对象名时用逗号分隔。中,可以是一般的对象名,还可以是指向对象的指针名或引用名,也可以是对象数组名。本例定义了2个对象、1个对象指针、一个对象数组。1919对象成员的表示方法对象成员的表示方法对象对象是广义“变量”,一个对象的成员就是该对象所属类所定义的成员。由于封装性,对象只能访问其中的公有成员,包括公有数据成员和公有成员函数。用运算符“.”来访问其中公有成员。对象名对象名.公有数据成员名公有数据成员名或者或者对象名对象名.公有成员函数名公有成员函数名(参数表参数表)例如:例如:clockA.cnt;/正确,访问数据成员正确,访问数据成员clockA.minute;/错误,错误,mi
12、nute是私有成员,不能访问!是私有成员,不能访问!clockA.init();/正确,访问成员函数正确,访问成员函数此处的此处的“.”运算符,功能是表示对象的成员。运算符,功能是表示对象的成员。2020【例例7.4】写出以下程序的执行结果写出以下程序的执行结果:#includeclassRectangleintx1,y1,x2,y2;public:voidsetRectangle(inta1,intb1,inta2,intb2)x1=a1;y1=b1;x2=a2;y2=b2;voiddispRectangle()coutRectangle:x1=x1,y1=y1endl;coutx2=x2,
13、y2=y2setRectangle(10,10,20,20);Rect2-dispRectangle();程序执行结果如下:程序执行结果如下:Rectangle:x1=0,y1=0 x2=10,y2=10Rectangle:x1=10,y1=10 x2=20,y2=20注意:如果类中的成员没有指明权限的,默认为私有。所以注意:如果类中的成员没有指明权限的,默认为私有。所以x1,y1,x2,y2的权限是的权限是private。22224 4、对象的初始化对象的初始化 简单简单构造函数和析构函数构造函数和析构函数 缺省构造函数和缺省析构函数缺省构造函数和缺省析构函数 拷贝构造函数拷贝构造函数232
14、3构造函数和析构函数构造函数和析构函数构构造造函函数数和和析析构构函函数数是是在在类类体体中中说说明明的的两两种种特特殊殊的的成员函数。成员函数。构构造造函函数数的的功功能能是是在在创创建建对对象象时时给给对对象象分分配配内内存存空空间间 ,并可使用给定值来,并可使用给定值来初始化初始化对象。对象。析析构构函函数数的的功功能能是是用用来来释释放放一一个个对对象象的的已已分分配配空空间间。并可在对象被清除前,完成一些并可在对象被清除前,完成一些清理清理工作。工作。构造函数与析构函数的功能正好是构造函数与析构函数的功能正好是对应对应的。的。2424构造函数有以下特点:构造函数有以下特点:1)构造函
15、数是类的一个成员函数,但有其特殊性;2)构造函数的函数名与类名相同,它不能有返回值,即使是void也不行。3)构造函数可以有参数,也可以没有参数,换句话说,构造函数可以重载;4)程序一般不直接调用构造函数,在创建对象时会自动调用构造函数,以完成对象的初始化工作。2525而析构函数有以下特点:而析构函数有以下特点:1)析构函数是类的一个特殊成员函数,一个类中只能有一个析构函数;2)析构函数的函数名与类名相同,并在前面加上“”;3)析构函数也不能有返回值,并且也不能有函数参数,换句话说,析构函数不能被重载;4)析构函数的主要功能是在对象消失时,执行如释放内存等清理工作;5)在对象消失时,析构函数会
16、被自动调用。2626缺省构造函数和缺省析构函数缺省构造函数和缺省析构函数缺省构造函数和缺省析构函数缺省构造函数和缺省析构函数1 1、缺省构造函数、缺省构造函数C+规定,每个类必须有构造函数,没有构造函数就不能创建对象。如果在类的定义中,程序员没有设计任何构造函数,C+会自动提供一个缺省的构造函数,它只分配对象的实体空间外。此时,如果创建的是静态对象或全局对象,则对象所有数据成员都初始化为零或空,如果是普通对象,它的值将会是随机的。缺省构造函数的形式是:类名:类名()/类体为空只要在类的定义中提供了任意一个构造函数,那么C+就不再自动提供缺省构造函数。27272 2、缺省析构函数、缺省析构函数
17、如果在类的定义中,程序员没有设计析构函数,如果在类的定义中,程序员没有设计析构函数,C+C+也会自也会自动提供一个缺省析构函数,格式:动提供一个缺省析构函数,格式:类名:类名()类名:类名()/缺省析构函数体为空缺省析构函数体为空2828拷贝构造函数拷贝构造函数构造函数除可以用基本数据类型初始化对象外,还可以使用已存在的同类型的对象即类类型的对象来初始化正在创建的对象。为此,必须在类中定义一个特殊的构造函数来完成这个工作,这个构造函数被称为拷贝初始化构造函数。它实现了在初始化时将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。当然,它具有一般构造函数的所有特性。格式为::(&)如:
18、student:student(student&s)每个类中必须有一个。若类中未说明,则编译系统会自动生成缺省函数。函数名同类名只有一个引用参数2929拷贝初始化构造函数被自动调用有三种情况:拷贝初始化构造函数被自动调用有三种情况:一、是用一个已知对象一、是用一个已知对象初始化一个新对象初始化一个新对象时。时。二、是以二、是以值调用方式值调用方式向一个函数向一个函数传递对象参数传递对象参数时。时。三、当对象作为三、当对象作为函数返回值函数返回值时。时。拷贝初始化构造函数拷贝初始化构造函数拷贝初始化构造函数又称复制构造函数拷贝初始化构造函数又称复制构造函数3030【例7.8】用已知对象初始化新建
19、对象时用已知对象初始化新建对象时:#includeclassPointpublic:Point(intxx=0,intyy=0)X=xx;Y=yy;/构造函数参数设置了缺省值Point(constPoint&p);/拷贝构造函数声明intGetX()returnX;/获取私有数据成员的公有成员函数intGetY()returnY;private:intX,Y;Point:Point(constPoint&p)3131X=p.X;Y=p.Y;coutCopy_constructorcalled.n;voidmain()PointA(10,20);/创建一个对象并传入参数去初始化PointB(A)
20、;/会自动调用拷贝构造函数coutB:B.GetX(),B.GetY()endl;程序运行的输出结果:程序运行的输出结果:Copy_constructorcalled.B:10,2032325 5、成员函数的特性成员函数的特性 内联函数和外联函数内联函数和外联函数 成员函数的重载性成员函数的重载性 设置参数的缺省值设置参数的缺省值3333内联函数:指定义在类体内的成员函数。外联函数:指说明在类体内,定义在类体外的成员函数。类外定义的函数缺省情况下都是外联函数,用关键字inline可以强制转换。对于内联函数,不是在调用时才转去执行函数体,而是在编译时对所有调用该函数的地方装入实际的函数代码。节省
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 类和对象 对象
限制150内