




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、分教课教职使院(部)研 室程名 称师 姓名称用教材教 案信息学院计算机科学与技术面向对象程序设计金淑娟讲师C+语言程序设计教务处制授课内容:第一章面向对象程序设计概念授课时数6教学目的及要求:了解:程序设计方法的发展过程,面向对象语言的特点。掌握:面向对象的概念,面向对象的程序开发过程。教学基本内容:程序设计方法的发展过程;面向对象程序设计的基本思想及概念,面向对象程序设计的要点 及开发过程。重点及难点:面向对象的概念,面向对象的程序开发过程。教学方法:口讲授法M讨论法M口自学指导法其他M教学手段:口多媒体M口实物模型口挂图口音像其他板书设计:讨论、思考题、作业:1 .叙述面向对象基本思想的特
2、点。2 .叙述面向对象的程序设计方法与传统回向过程的程序设计方法有何不同。3 .什么是类,什么是对象,类和对象是怎样的关系?4 .抽象包括哪两方面的含义?5 .什么是封装,它具有怎样的特点?6 .什么是多态?多态的实现方式及作用有哪些?7 .什么叫对象的封装性?什么叫信息隐藏? C+语言是怎样实现信息隐藏的?8 .什么叫继承?什么叫派生?9 .什么叫多态性?多态性主要有哪几种?10 .什么叫运行时的多态性? C+语言中是怎样实现运行时的多态性的?参考资料(含参考书目、文献等):1、Hacy M.Dcitcl 71 Paul James DcitclC+大学教程(第三版),电子工业出版社。2、刘
3、正林,面向对象程序设计,华中科技大学出版社。3、周生炳等,面向对象程序设计,清华大学出版社。4、揣锦华,面向对象程序设计与VC+实践,西安电子科技大学出版社。5、王育坚编,面向对象编程教程,清华大学出版社。6、王萍编著,C+面向对象程序设计,清华大学出版社出版。7、徐孝凯等编,面向对象程序设计实验,中央广播电视大学出版社出版。第一节面向对象的方法一、面向对象的语言出发点:更直接地描述客观世界中存在的事物时象)以及它们之间的关系。特点:是高皴语言。将客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态实现代码重用。优点:使程序能够比较直接地反问题域
4、的本来面目,软件开发人员能够利用人类认识事 物所采用的一般思维方法来进行软件开发。二、程序设计方法的发展历程1 .面向过程的程序设计方法程序的目的:用于教学计算。主要工作:设计求解问题的过程。缺点:对于庞大、宜杂的程序难以开发和维护。2 .面向过程的结构化程序设计方法设计思跖:自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。程序结构:按功能划分为若干个基本模块,形成一个树状结构。各模块间的关系尽可能简 单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组 成。其模块化实现的具体方法是使用于程序。优点:有效地将一个较更杂的程序系统设计任务分解成许多易于控制和处理的
5、于任 务,便于开发和维护。缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件。具体有 以下几点:- 把数据和处理数据的过程分离为相互独立的实体。- 当数据结构改变时,所有相关的处理过程都要进行相应的修改。- 每一种相对于老问题的新方法都要带来额外的开错,程序的可重用性差。- 图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困 难。3 .面向对象的方法方法: 将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离 的整体一对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外界发生关系。 对象与对象之间通过消息进行通讯。优点: 程序模
6、块间的关系更为筒单,程序模块的独立性、数据的安全性就有了 良好的保障。 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。三、面向对象的基本概念1. 一般意义上的对象: 是现实世界中一个实际存在的事物。 可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。 是构成世界的一个独立单位,具有:静态特征-可以用某种数据来描述动态特征-对象所表现的行为或具有的功能2 .面向对象方法中的对象: 是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基 本单位。对象由一组属性和一组行为构成。 属性-用来描述对象静态特征的数据项。 行为-用来描述对象动态特征的操作序
7、列。3 .分类所依据的原则一一抽象忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出 事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。 例如,石头、树木、汽车、分类人类通常的思维方法。房屋等都是人们在长期的生产和生活实践中抽象出的概念。4 .面向对象方法中的“类” 具有相同属性和服务的一组对象的集台。 为属于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。 类与对象的关系:犹如模具与铸件之间的关系,一个属于某类的对象称为该类的一个实例。5 .面向对象方法中的,封装” 把对象的属性和服务结合成一个独立的系统单元。 尽可能隐蔽对象的内部细节。对外形成一个
8、边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。6 .面向对象方法中的“继承”继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率 的重要原因之一。 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类 的继承。例如:将轮船作为一个一般类,客轮便是一个特殊类。7 .面向对象方法中的,多态性” 多态是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不 同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其 各个特殊类中具有不同的语义。例如:数的加法-实数的加法分集:数的加法第二节面向对象的软件开发面向对象的软件工程(软件开发)是面向对
9、象方法在软件工程领域的全面应用。它包 括:- 面向对象的分析(QQA)- 面向对象的设计(0()0)- 面向对象的编程(OOP)- 面向对象的测试(QQT)- 面向对象的软件维护(QQSM)一、系统分析 系统分析阶段应该扼要精确地抽象出系统必须做什么,但是不关心如何去实 现。 面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对 单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界 限而重新组合,因此能够很好地映射客观事物。二、设计 针对系统的一个具体实现运用面向对象的方法。其中包括两方面的工作:- 把OOA模型直接搬到QOD,作为QOD的一部分。针对具体实现中
10、的人机界面、数据存储、任务管理等因素补充一些与 实现有关的部分。三、编程QQP工作就是用一种面向对象的编程语言把QQD模型中的每个成分书写出来, 是面向对象的软件开发最终落实的重要阶段。四、测试测试的任务是发现软件中的错误。在面向对象的软件测试中继续运用面向对象的概念与原则来组织测试,以对象的 类作为基本测试单位,可以更准确的发现程序错误并提高测试效率。五、维护将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户需求,不 断改进系统。使用面向对象的方法开发的软件,其程序与问题域是一致的,因此,在维护阶段运 用面向对象的方法可以大大提高软件维护的效率。授课内容:第一章类与对象授课时数1
11、8教学目的及要求:掌握:类定义的方法和存取级别。掌握:类的成员变星和成员函数的定义和使用,以及对象的定义。了解:友元函数和友元类。掌握:构造函数和析构函数。掌握:静态类成员变量和成员函数的定义和使用方法。掌握:内联函数的定义和使用方法。掌握:对象指针及对象引用的使用。了解:容器类的定义。掌握:在函数中对象传递的机制。教学基本内容:类的声明,对象的定义,构造函数、析构函数,对象指针,对象引用,静态成 员,友元,标识符的作用域,对象数组,成员对象,对象的存储类等。重点与难点:类及类对象的定义,构造函数、析构函数的定义,对象指针及对象引用的使用, 容器类的定义。教学方法:口讲授法M讨论法M口自学指导
12、法其他M-教学手段:口多媒体M口实物 模型 口挂图 口音像 其他板书设计:讨论、思考题:1 .什么是类,什么是对象,类和对象是怎样的关系?2 .叙述静态成员和一般成员的区别。3 .什么叫友元?什么叫友元类?什么叫友元函教?什么叫友元成员函数?4,叙述友元与类的封装性之间的关系。5.友元方法有什么优点?有什么缺点?作业:见书中第四章练习参考资料(含参考书目、文献等):1、Harvey M.DuituI及Paul JamusDukd首,C+大学教程(第三板),电子工业出版社。2、刘正林,面向对象程序设计,华中科技大学出版社。3、周生炳等,面向对象程序设计,清华大学出版社。4、揣锦华,面向对象程序设
13、计与VC+实践,西安电子科技大学出版社。5、王育坚编,面向对象编程教程,清华大学出版社。6、王萍编著,C+面向对象程序设计,清华大学出版社出版。7、徐孝凯等编,面向对象程序设计实验,中央广播电视大学出板社出版。第一节C+的面向对象的概念一、抽象的概念抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。-先注意问题的本质及描述,其次是实现过程或细节。- 数据抽象:描述某类对象的属性或状态(对象相互区别的物理星)。- 代码抽象:描述某类对象的共有的行为特征或具有的功能。- 抽象的实现:通过类的声明。二、抽象实例1 .日期抽象实例数据抽象:int Year, int Mont
14、h, int Day代码抽象:SclPatcO,设置年、月、日IsLcapYcarO,”计算某年是否为闰年ShowDalrO,/显示年、月、日的值抽象实例日期类class Datepublic:void SctDatc(int y, int m, int d);int IsLcapDatcQ;void ShowDalcO;private:inv Year,Month,Day;2 .钟表抽象实例-钟表数据抽象:inv Hour, int Minute, int Second代码抽象:SetTimeO, ShowTimcQ抽象实例钟表类class Clockpublic:void SctTimc(
15、int NewH, int New, int NewS);void ShowTimcO;private:int Hour,Minute,Second;3 .抽象实例人数据抽象:char *namc,char * gender,int age,int id代码抽象:生物属性角度:GctClothO, EatQ, StepO,-社会属性角度:WorkQ, Promote:。,二、封装将抽象出的数据成员、代码成员相结合,将它们视为一个整体。- 目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。- 实现封装:类声明中的实例:class C
16、lockpublic:void SciTimc(int NcwH, int NcwM, int NcwS);void ShowTimcO;private:inv Hour,Minute,Second;三、继承与派生是C+中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进 行更具体的说明。实现:声明派生类第七章四、多态性 多态:同一名称,不同的功能实现方式。 目的:达到行为标识统一,减少程序中标识符的个教。 实现:重载函数和虚函数一一.第7(章五、C+中的类 类是具有相同属性和行为的一组对象的集台,它为属于该类的全部对象提供了 统一的抽象描述,其内部包括属性和行为两个主要部分。 利
17、用类可以实现数据的封装、隐藏、继承与派生。 利用类易于编写大型宜杂程序,其模块化程度比c中采用函数更高。第二节类的定义格式一、类的声明类是一种用户自定义类型,声明形式:class类各称(public:公有成员(外部接口)private:私有成员protected:保护型成员;(1)类的定义格式分为说明部分和实现部分,说明部分用来描述该类中的成员,包括 数据成员和成员函数,成员函数使用来对数据成员进行操作的即“方法”,实现部分用来定 义各种成员函数,描述这些成员函数如何实现队数据成员的操作。(2)类由类头和类体两部分组成。类头由关键字class和类各组成,类名是由用户定义 的标识符,类头用来向便
18、宜系统声明定义了一个新的class类型;而类体是对类的组织形式 进行具体的描述,它由访问限制符(private,protccl",public)、数据成员和成员函数组成,整 个类体用一对大括号括起来,完整地表达对类的描述。(3)class允许隐藏内部成员,它依靠类定义中的3个访问限制符publicprivatcprolcctcd 来确定隐藏的程度,它们将类体分成3个大部分。(4)类的定义只是定义了某种类的组织形式,类似于结构体的定义,编译系统并不给 class类型的每个数据成员分配具体的内存空间。二、类成员的访问控制3个访问限制符将类体分成3个大部分,每一部分都可以有数据成员和成员函
19、数,也 可以只有数据成员或只有成员函数,但不同的访问限制符规定了该部分所具有的访问权限。1. Public (公有类型的成员)在关键字public后面声明,这一部分是透明的,它的数据成员和成员函数是开放的, 即可以由本类的成员函数直接访问,也可以由任何外部函数来访问,它们是类与外部的 接口。外部访问是通过“对象等公有成员占”进行。2. Private (私有类型的成员)在关健宇privalu后面声明,这一部分象一个黑盒子,完全隐藏的。它只允许本类中 的成员函数直接访问(既在成员函数体内直呼其各写出成员名),象日期类Dak的SdDag) 成员函数体内,可以直接写<<ycar=y;mo
20、nth=m,day=d;M等语句;而类外部的任何函数都不 能访问。如不允许编写成”对象名.私有成员占“形式。如果紧跟在类名称的后面声明私有成员,则关键字pKM可以省略。3. Protected (保护类型成员)这一部分是半透明的,与private类似,其差别表现在继承与派生时对派生类的影响 不同。它可由本类成员函数或它的派生类成员函数直接访问,而其它的函数不允许访问此部 分。二、数据成员与一般的变量声明相同,但需要将它放在类的声明体中。class Clockpublic:void SctTimc(int NexvH, int NewM, int NewS);声明设置时钟的成员函数void Sh
21、obTimu。;/声明显示时钟的成员函数private:int Hour, Minute, Second;void Clock : SctTimc(int NewH, int NrwM, int NewS) /设置时钟的成员函数在类体外的 实现Hour=NcwH;Minutc=NcwM;Sucond=NcwS;void Clock : ShowTimcO /显示时钟的成员函数在类体外的实现c()ut<<H()ur<<,:H<<Minutc<<l,:H<<Scc()nd;通常,总是将数据成员指定为私肓的,以实现数据隐藏,这些数据成员用来
22、描述该类 对象的属性,编程者无法直接访问它们而隐藏起来。四、成员函数1)成员函数说明 在类中说明原形,可以在类外给出函数体实现,并在函数右前使用类各加以限定。 也可以直接在类中给出函数体,形成内藤成员函数。 允许声明重载函数和带默认形参值的函数。(见上面例子中成员函数的定义)2)内联成员函数 为了提高运行时的效率,对于较简单的函数可以声明为内联形式。 内联函数体中不要有侵杂结构(如循环语句和switch语句)0 在类中声明内联成员函数的方式:- 将函数体放在类的声明中。-使用inline关键字。举例1 :class Pointpublic:void IniinitX,int initY)X=i
23、nitX;Y=initY;int GctXQ return X;int GetYQ return Y;private:ini X,Y;;举例2class Pointpublic:void lnit(int initXjnt initY);intGctXO;int GctYQ;private:int X,Y;inline void Point:Init(int initX,int initY)X=initX;Y=iiiitY;inline int P()int:GctX()rcUim X;inline int Point:Gct7()return Y;一般将成员函数指定为公有的,作为该类对象访问
24、私有数据成员的一个接口界面,即 对象访问私有数据成员的一条消息通道提供给外界使用。因此,一个类的对象只能通过公有成员函数访问它的私有数据成员,从而隐藏了处理 这些数据的具体实现细节,使得类对数据的描述和类提供给外界来处理数据的界面互相独 立,这就给出了面向对象的重要特性。如日期类Date封装在一个程序实体内(定义日期类 Date的程序代码),将它的私有数据成员yergonthdiy等隐藏起来,不让对象随意访问,对象要访问这些私有数据成员,也只有通过公有的成员函数SctDalH)、kLe叩、&吟和PrintDatuO等才能实现。举例:Counter类用类定义一个计数器的抽象数据类型,计数
25、器允许的取值范围为04294967295的正整 数,可进行的操作是计数器加1、减1和读计数器的值。数据抽象:intvalue;代码抽象:Counted);给计数器赋初值Segment。;/在计数器允许取值范围内对计数器加1DccrcmcntO;/在计数器允许取值范围内对计数器减1RuadValuc();/读计数器的值Countur();撤消Counter类的对象程序实现:见面的1L2# include <第三节对象的定义一、对象的定义格式类的对象是该类的某一特定实体,即类类型的变量。声明形式类占对象占;例 Clock myClock;访问对象成员类中成员互访:直接使用成员各。类外访问:使
26、用“对象名成员仁”方式访问public属性的成员。类应用举例:#includc<i()strcam>using namespace std;class Clock类的声明略/类的实现"int main。 Clock myClock;myOock.SctTimc(8,30,30);myClock.ShowTimcO;二、对象指针和对象引用的定义格式1、对象指针声明形式类名*对象指针占;例Point A(5,10);Piont *ptr;ptr=&A;通过指针访问对象成员对象指针各成员占ptr->gctxQ 相当于(*ptr).gctxO;对象指针应用举例:in
27、t main。Point A(5,10);Point *ptr;ptr=&A;int x;x=ptr->GctX();cout<<x<<cndl;return 0;2、对象引用(声明形式类名&对象占=巳存在的同类对象各;给已有的对象另外取一个别名例:Point A;Pioiit &B=A;通过对象引用访问对象成员使用“对象引用等成员台”方式访问public属性 的成员(与使用对象名成员各方式访问是等价的)。举例说明:#includc<iostrcam>using namespace std;class Clock类的声明略/类的
28、实现屿int rnainQ Clock Clockl;Clock &myClock=Clockl;/ / 定义对象引用myClock.SetTime(8,30R);/等同于 Clockl. etTime(8,3030);myClock.ShowTimu();等同于 Clockl. ShowTimcQ;第四节对象的初始化一、构造函数1、构造函数说明构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化 为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个默认形式的构造函数允许为内减函数、重载函数、带默认形参值的函数。构造函数举例:class
29、 Clockpublic:Clock (ini NcwH, inv NcwM, ini NcwS);构造函数void ScvTimc(int NcwH, inv NcwM, inv NcwS);void ShowTimcQ;private:int Hour,Nlinutr,Second;构造函数的实现:Cl()ck::Ck)ck(int NuxvH, int NewM, ini NrwS)Hour= NewH;Minutc= NewM;Second = NewS;建立对象时构造函数的作用:int main。Clock c (0,0,0);隐含调用构造函数,将初始值作为实参。c-ShowTimc
30、Q;2、复制构造函数(拷贝构造函数)拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。class类名 public:类名(形参);构造函数类名(类占&对象名);拷贝构造函数 ;类名::类名(类占&对象各)拷贝构造函数的实现 函数体 拷贝构造函数举例1:class Pointpublic:P()int(int xx=O,int yy=0)X=xx; Y=yy;P()int(P(int& p);hit GctXQ return X;int GetYQ ruturnY;private:int X,Y;P()int:P()int (Point& p)x=p.x;
31、Y=p.Y;coutv v”拷贝构造函数被调用侵制构造函数举例2:当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷 贝赋值。int mainQ PoimA(l,2);Point B(A); 拷贝构造函数被调用cout<<B.GctX()<<cndl;复制构造函数举例3:若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函 数。例如:void fiinl (Point p) cout<<p.GctXQ<<cndl;int main。 Point A(l);funl(A); 调用拷贝构造函数侵制构造函数举例
32、4:当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2Q Point A(l,2);return A; /调用拷贝构造函数int mainQPoint B;B=fun2Q;如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值, 初始化将要建立的对象的对应数据成员。二、析构函数完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它, 然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默 认的析构函数。构造函数和析构函数举例:#indudc<
33、;iostrcam>using namespace std;class Pointpublic:P()int(int xxjnt yy);-PointO;其它函数原形private:iniXjntY;P(>int:P()int(int xxjnt yy) X=xx; Y=yy;Point:-Point。/其它函数的实现略类的应用举例:一周型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。橱 栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输 入。要求编程计算并输出过道和栅栏的造价。#includc <iostrcam> us
34、ing namespace std;const float PI = 3.14159;const float FciiccPricc = 35;const float ConerctcPricc = 20;/声明类Circle及其数据和方法class Circleprivate:float radius;public:Circlc(floal r); 构造函数float CircumfcrcnccO const; 圆周长float ArcaQ const; 圆面积;/类的实现/构造函数初始化数据成员radiusCirclc:Circlc(floal r)radius=r/计算圆的周长float
35、 Circlc::CircumfcrcnccO const(return 2 * PI * radius;/计算圆的面积float Circlc:Arca() constreturn PI * radius * radius;) void main Qfloat radius;float FciiccCost, ConcrctcCost;/提示用户输入半径cout<<MEnter the radius of the pool: M;cin» radius;声明Circle对象Circle Pool(radius);Circle P()olRim(radius + 3);/
36、计算栅栏造价并输出FciiccCost = P(x)lRim.CircumfcrenceQ * FcnccPricc;cout << "FencingCost is ¥" << FcnccCost << cndl;/计算过道造价并输出ConcrctcCost = (PoolRim.ArcaO - P()()I.Arca()*C()ncrcLcPricc;cout << HConcrete Cost is ¥" << ConcrctcCost « ciidl;运行结果Enter
37、 the radius of the pool: 10Fencing Cost is ¥ 2858.85Concrete Cost is Y 4335.39第五节对象指针和对象引用的应用一、对象指针作为函数的参数二、对象引用做函数的参数三、This指针1、This指针说明隐含于每一个类的成员函数中的特殊指针。明确地指出了成员函数当前所操作的数据所属的对象。-当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了 this指针。例如:Point类的构造函数体中的语句:X=xx;Y=yy;相当于:this-&
38、gt;X=xx;this->Y=yy;2、指向类的非静态成员的指针通过指向成员的指针只能访问公有成员。1)声明指向成员的指针 声明指向公有数据成员的指针。类型说明符 类名:*指针台; 声明指向公有函数成员的指针)类型说明符(类等产指针耸(参数表); 指向数据成员的指针(说明指针应该指向哪个成员)指针占=&类等:数据成员占;2)通过对象名(或对象指针)与成员指针结合来访问数据成员对象等*类成员指针名或:对象指针各一>*类成员指针各 指向函数成员的指针初始化指针名=类等:函数成员各;3)通过对象名(或对象指针)与成员指针结合来访问函数成员(对象各产类成员指针占X参数表)或:(对
39、象指针各一>*类成员指针名)(参数表)举例说明:访问对象的公有成员函数的不同方式ini main。主函数 Point A(4,5); 声明对象 APoint *pl=&A;声明对象指针并初始化声明成员函数指针并初始化int (Point:*p_GetX)0=Point:GetX;/ (1)使用成员函数指针访问成员函数cout< < (A.*p_GetX) Q < <endl;/ (2)使用对象指针访问成员函数 cout<<(pl->GctX)Q«cndl;/ (3)使用对象台访问成员函数 c()ut<<A.GctXQ
40、<<ciidl;3、指向类的静态成员的指针对类的静态成员的访问不依赖于对象可以用普通的指针来指向和访问静态成员例6-1通过指针访问类的静态数据成员#includc <iostrcam>using namespace std;class Point /Point 类声明public:外部接口Point(int xx=0, int yy=O) X=xx;Y=yy;countP+;构造函数 P()int(P()ini &p); 拷贝构造函数 int GctXQ return X;int GetYQ return Y;static int countP;静态数据成员引用
41、性说明private: /私有数据成员int X,Y;Point :Point(Point &p) X=p.X; Y=p.Y; couniP+; int Poini:c()uniP=0; 静态数据成员定义性说明int main。/主函教声明一个int型指针,指向类的静态成员int *count=&Point:countP;Point A(4,5); 声明对象 Acout«MP()int A;,«A.GctX0<<,/,<<A.GctY0;/直接通过指针访问静态数据成员cout«M Object id=H<<*co
42、um<<ciidl;Point B(A);/声明对象 Bcout«MPoint B,H«B.GctX()«1,H«B.GetY0;直接通过指针访问静态数据成员cout<<H Object id=H<<*coiint<<cndl;例6-15通过指针访问类的静态函数成员#includc <iostrcam>using namespace std;class Point /Point 类声明 public:外部接口其它函数屿static void GctCQ/静态函数成员cout<<H O
43、bject id=H<<countP<<ciidl;private: 私有数据成员int X,Y;static int countP;静态数据成员引用性说明;/函数实现略int P()int:c()uniP=O; /静态数据成员定义性说明int mainQ 主函数/指向函数的指针,指向类的静态成员函数void (*gc)0=Point:GctC;Point A(4,5); /声明对象 Acout«MPoint A;,«A.GctX0«H,M«A.GctY0;gcQ; 输出对象序号,通过指针访问静态函数成员Point B(A);/声
44、明对象 Bcout<<,TointB;,<<B.GetXO<<,<<B.GetYO;gcO; 输出对象序号,通过指针访问静态函数成员四、递归类第六节 动态内存分配一、动态申请内存操作符newnew类型占T (初值列表)功能:在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值。结果值:成功:T类型的指针,指向新分配的内存。失败:0 (NULL)二、释放内存操作符deletedelete 指针 P功能:释放指针P所指向的内存。P必须是new操作的返回值。例6-16动态创建对象举例#includc<iostrcam>us
45、ing namespace std;class Point public:Point。 X=Y=0; cout<<HDcfault Constructor called.nH;P()int(int xxjnt yy) X=xx; Y=yy; cout<< "Constructor callcd.nH; -Point。 cout«nDcstructor callcd.n° int GctXO return X;int GetYQ return Y;void Movc(int xjnt y) X=x; Y=y; private:int X,Y;
46、int main。 cout<<MStcp ()nc:H<<cndl;Point *ptrl=new Point;delete Ptrl;cout<<uStcp Tw():H<<cndl;Ptrl =nrxv Point。,2);delete Ptrl;return 0;运行结果:Step One:Default Constructor called.Destructor called.Step Two:Constructor called.Destructor called.三、浅拷贝与深拷贝浅拷贝-实现对象间数据元素的一一对应更制。深拷贝-当
47、被曳制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将 指针所指的对象进行复制。例6-20对象的浅拷贝#includc<iostrcam>using namespace std;class Point类的声明同例6-16/;class ArrayOfPoints类的声明同例6-18/;int mainQ int number;cin>>numbcr;ArrayOFPoints pointsArrayl (number);pointsArrayl.Elcmcnt(0).Movc(5,10);points Array l.Elcmciit(l).M()vc(l 5
48、,20);A rrayC) fPoints points A rray2 (points A rrayl);cout<<HC()py of points A rray 1 :M < < end 1;cout<<HPoint_0 of array2: " <<pointsArray2.Elcmciit(0).GctX0<<* H<<pointsArray2.Elcmcnt(0).GetYO<<cndl;cout<<HPoint_l of array2: H <<p(>int
49、sArray2.Elcmciit( 1).GctXQ<<* H<<p()intsArray2.Elcmcni(l).GctY0<<cndl;points Array l.Elcmcnt(0).M()vc(25,30);points A rray 1 .Element(1) .Move (35,40);cout<<HAftcr the moving of pointsArrayl:1,«endl;cout<<HPoint_0 of array2: H<<pointsArray2.Elcmcnt(0).GctXO
50、171;9 M<<pointsArray2.Elcmciit(0).GctY()<<cndl;cout<<HPoint_l of array2: M<<pointsArray2.Elcmcnt(l).GctX0<<r M<<pointsArray2.Elcmcnt(l).GctY0<<cndl;运行结果如下:Please enter the number of points:2Default Constructor called.Default Constructor called.Copy of points
51、Arrayl:Point_0 of array2: 5, 10Pointof array2: 15, 20After the moving of pointsArrayl:Point_0 of array2: 25, 30Pointof array2: 35, 40Deleting.Destructor called.Destructor called.Deleting.接下来程序出现异常,也就是运行错误。用图说明浅拷贝(见电子课件)例6-21对象的深拷贝#includc<iostrcam>using name space std;class Point类的声明同例6-16;cla
52、ss ArravOfPointsJ public:A rrayO fPoints (A rrayO fPoints& points Array);其它成员同例6-18;ArravOfPoints :ArravOfPoints <J(Array()fP()ints& pointsArray) numberOfPoints=p()intsArray.numbcr()fP()ints;points=nrT Pointnumbcr( )fPoints;f()r (int i=0; i<numbcr()fPoints; i+)points H.Movc (points A r
53、ray. Elcmciit(i) .GctXQ,pointsArray.Elcmcnt(i).GctYO);int main。 同例 6-20程序的运行结果如下:Please enter the number of p()ints:2Default Constructor called.Default Constructor called.Default Constructor called.Default Constructor called.Copy of pointsArrayl:Point_0 of array2: 5, 10Pointofarray2: 15, 20After the
54、 moving of pointsArrayl:P()int_0 of array2: 5,10Pointof array2: 15, 20Deleting.Destmetor called.Destructor called.Deleting.Destmetor called.Destructor called.用图说明(见电子课件)第七节静态成员一、静态数据成员int Point:countP=0;int mainOPoint A(4,5);cout<<nPoiiit A,r<<A.GctX()<<n,H«A.GctYO;A.GctCQ;Poi
55、nt B(A);cout«nPoint B?,«B.GctX0«n;,«B.GctY0;B.GctCO;|二、静态成员函数静态成员函数-类外代码可以使用类占和作用域操作符来调用静态成员函数。-静志成员函数只能引用属于该类的静态数据成员或静态成员函数。静态成员函数举例1:#includc<i()strcam>using namespace std;class Application public:static void fQ;static void gQ;private:static int global;int Applicati()n::global =0;void Applicari()n:fQ global=5;void Applicari()n:gQ cout<<global<<cndl;int main。Applica
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2腊八粥(教学设计)-2023-2024学年语文六年级下册统编版
- 《6 飞翔的风筝》(教学设计)-2023-2024学年五年级下册综合实践活动皖教版
- 18古诗三首《书湖阴先生壁》教学设计2024-2025学年统编版语文六年级上册
- 2025年中国信封印刷行业市场发展前景及发展趋势与投资战略研究报告
- 21古诗三首 教学设计-2024-2025学年语文四年级上册统编版
- 2025年隔挡机项目投资可行性研究分析报告
- CHC燃料油项目可行性研究报告
- 2025年度知识产权侵权自愿赔偿协议书(电子版)
- 2025年中国网板干燥炉行业市场发展前景及发展趋势与投资战略研究报告
- 2025年度小学教师教师培训与发展聘用合同
- GB/T 19342-2024手动牙刷一般要求和检测方法
- 渗透检测报告
- DB4401-T 1-2018老年人照顾需求等级评定规范-(高清现行)
- 值班、交接班制度课件
- 广告公司业务价格表
- 防水卷材热老化试验检测记录表
- 领导干部道德修养1
- 房地产现金流量表
- 《ANSYS有限元基础》课程教学大纲
- 国内外创造性思维培养模式的对比研究综述
- 2022年露天煤矿安全资格证考试题库-上(单选、多选题库)
评论
0/150
提交评论