C++程序设计基础课件第6-7讲-类和对象(一)-

PPT
  • 阅读 52 次
  • 下载 0 次
  • 页数 69 页
  • 大小 629.512 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C++程序设计基础课件第6-7讲-类和对象(一)-
可在后台配置第一页与第二页中间广告代码
C++程序设计基础课件第6-7讲-类和对象(一)-
可在后台配置第二页与第三页中间广告代码
C++程序设计基础课件第6-7讲-类和对象(一)-
可在后台配置第三页与第四页中间广告代码
C++程序设计基础课件第6-7讲-类和对象(一)-
C++程序设计基础课件第6-7讲-类和对象(一)-
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 69
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】C++程序设计基础课件第6-7讲-类和对象(一)-.ppt,共(69)页,629.512 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44705.html

以下为本文档部分文字说明:

修改时间:2011年3月C++程序设计—类和对象(一)1C++程序设计基础主讲人:曹岳辉2011年春季学期第6-7讲类和对象(一)修改时间:2011年3月C++程序设计—类和对象(一)2类的定义对象的定义对象的初始化成员函数的特性静态成员友

元局部类和嵌套类主要内容修改时间:2011年3月C++程序设计—类和对象(一)31.类的定义面向对象的基本概念类的定义格式注意事项修改时间:2011年3月C++程序设计—类和对象(一)4在现实中,类是对一组客观对象的抽象,它将该

组对象所具有的共同特征(包括属性和服务)封装起来,以说明该组对象的能力和性质。在系统中,类(class)是一种用户自定义的数据类型。通过类使得现实中的抽象实体在程序中直接表示为一个标识符,并可以进行引用和操作。这使得程

序中的概念与应用中的概念相互比较一致和对应。面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)51.对象客观世界中任何一个事物都可以看成一个对象(object)。对象可大可小。对象是构成系统的基本单位。任何对象都具两个要素,即属性(attribute)和行

为(behavior)它能根据外界给的信息进行相应的操作。一个对象往往是由一组属性和一组行为构成的。在一个系统中的多个对象之间通过一定的渠道相互联系。要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。对象之

间就是这样通过发送和接收消息互相联系的面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)6面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)71.C++,每个对象都是由数据和函数(即操作代码)两部分组成。2.数

据体现了前面提到的“属性”。如一个三角形对象,它的3个边长就是它的属性。3.函数是用来对数据进行操作的,以便实现某些功能(即行为)。例如可以通过边长计算出三角形的面积等,计算三角形面积就是前面提到的行为,在程序设计方法中也称为方法(method)

。4.调用对象中的函数就是向该对象传送一个消息(message),要求该对象实现某一行为(功能)。面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)82.封装与信息隐蔽对一个对象进行封装处理,把它的一部分属性和功能对外界

屏蔽,也就是说从外界是看不到的,甚至是不可知的。其好处是大大降低了操作对象的复杂程度。封装:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口

,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(informationhiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)93.抽象抽象

(abstraction)就是将有关事物的共性归纳、集中的过程。抽象的作用是表示同一类事物的本质。C++中的数据类型就是对一批具体的数的抽象。对象是具体存在的,类是对象的抽象;对象则是类的特例,或者说对象是类的具

体表现形式。(如一个三角形可以作为一个对象,10个不同尺寸的三角形是10个对象。如果这10个三角形对象有相同的属性和行为,可以将它们抽象为一种类型,称为三角形类型。在C++中,这种类型就称为“类(class)”。这10个三角形就是属于同一“类”的对象。)面向对象的基本概念修

改时间:2011年3月C++程序设计—类和对象(一)104.继承与重用如果在软件开发中已经建立了一个名为A的“类”,又想另外建立一个名为B的“类”,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为,只需在类A

的基础上增加一些新内容即可。这就是面向对象程序设计中的继承机制。利用继承可以简化程序设计的步骤。(举例:白马继承马的特征)C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类。这就是常说的“软件重用”(softwarereusa

bility)的思想。面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)115.多态性如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这就是多态现象。(在Windows下,用鼠

标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。)多态性(polymorphism)是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程

序的灵活性。面向对象的基本概念修改时间:2011年3月C++程序设计—类和对象(一)12传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。面向对象

程序设计的特点修改时间:2011年3月C++程序设计—类和对象(一)13面向对象程序设计面对的是一个个对象。其中每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。程序设计者的

任务包括:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。对一个大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。面向对象程序设计的特点修改时间:201

1年3月C++程序设计—类和对象(一)14面向对象的程序设计是以类和对象为基础的,程序的操作是围绕对象进行的,在此基础上利用了继承机制和多态性等。面向过程的结构化程序设计中,常用以下公式来表述程序:程序=算法+数据结构面向对

象程序设计就是把一个算法和一组数据结构封装在一个对象中。因此就形成了新的观念:对象=算法+数据结构程序=(对象+对象+对象+…)+消息或:程序=对象s+消息面向对象程序设计的特点修改时间:2011年3月C++程序设计—类和对象(一)15随着软件规模的迅速

增大,软件人员面临的问题十分复杂。需要规范整个软件开发过程,明确软件开发过程中每个阶段的任务,在保证前一个阶段工作的正确性的情况下,再进行下一阶段的工作。这就是软件工程学需要研究和解决的问题。面向对象的软件工程包括以下几个部分:面向对象的软件开发修改时间:

2011年3月C++程序设计—类和对象(一)161.面向对象分析(objectorientedanalysis,OOA)软件工程中的系统分析阶段,系统分析员要和用户结合在一起,对用户的需求作出精确的分析和明确的描述

,从宏观的角度概括出系统应该做什么(而不是怎么做)。面向对象的分析,要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。建立一个能反映真

实工作情况的需求模型。面向对象的软件开发修改时间:2011年3月C++程序设计—类和对象(一)172.面向对象设计(objectorienteddesign,OOD)根据面向对象分析阶段形成的需求模型,对每一部分分别进

行具体的设计。首先是进行类的设计,类的设计可能包含多个层次(利用继承与派生)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。在设计阶段,并不牵涉某一种具体的计算机语言,而是用一种更通用的描述工具(如伪代码或流程图)来描述。面向对象的软件开发修改时间:2011年3月C

++程序设计—类和对象(一)183.面向对象编程(OOP)用一种计算机语言把它写成程序,显然应当选用面向对象的计算机语言(例如C++),否则无法实现面向对象设计的要求。4.面向对象测试(objectorientedtest,OOT)在写好程序后交给用户使用前,必须对程序进行严格的测试。测

试的目的是发现程序中的错误并改正它。面向对象测试是用面向对象的方法进行测试,以类作为测试的基本单元。面向对象的软件开发修改时间:2011年3月C++程序设计—类和对象(一)19类的定义格式类的定义格式一般分为说明部分和实现部分。说明

部分:是用来说明类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,也称为“方法”。实现部分:是用来对成员函数进行定义。说明部分的一般格式为:class类类型名{private:私有成员说

明public:公有成员说明};程序中的任何函数都可访问私有访问权限,为默认值,可缺省除本类中的成员函数及友元外,其他类外函数不能访问。公有访问权限修改时间:2011年3月C++程序设计—类和对象(一)20例如:定义一个person类,设person具有的特征:属性(姓名、年龄、性别),方法(输

出一个人的属性);则对应着有4个成员:三个数据成员,一个成员函数。这些数据成员一般不能由外界直接访问,随意修改。而只能通过成员函数进行访问。所以三个数据成员定义为私有成员,print成员函数定义为公有成员。则有:classTperson{private:cha

rname[10];intage;charsex;public:voidprint();};成员函数的说明形式与一般函数的说明形式一致数据成员的说明形式与变量的定义形式相似类名通常用T字母开始,以区别

其他标识符修改时间:2011年3月C++程序设计—类和对象(一)21类的实现部分即定义它的成员函数,方式与定义普通函数大体相同。若在类说明外部定义成员函数,则应使用作用域限定符::指明该函数是哪个类中的成员函数。格式为:类型类名::成员函数名(参数表){函数体}如:voidTpe

rson::print(){cout<<name<<age<<sex<<endl;}除特殊指明外,成员函数操作的是同一对象中的数据成员。其中如name等。若在成员函数中调用非成员函数(没有类名的函数;全局函数)

,则可用不带类名的::来表示。修改时间:2011年3月C++程序设计—类和对象(一)22当成员函数的规模较小时,语句只有1-5行,符合内联函数条件,则可在类中定义成员函数,成为内联成员函数。如:cla

ssTDate{public:voidSet(intm,intd,inty)//置日期值{month=m;day=d;year=y;}voidPrint();//打印输出private:intmonth;intday;intyear;};由于类名是成员函数名的一部分,所以一个类的成员函

数与另一个类的成员函数可同名若将内联成员函数定义在类说明之外则要加上inline。内联成员函数修改时间:2011年3月C++程序设计—类和对象(一)23注意注意事项1、在类体中不允许对所定义的数据成员进行初始化。classTDate{public:…priva

te:intyear(1998),month(4);…};2、类中的数据成员的类型可以为任意的。3、习惯将类的定义代码放到一个头文件中,以后若要使用则用文件包含命令包含。错误修改时间:2011年3月C++程序设计—类和对

象(一)24如定义一个类:classTPoint{public:voidSetPoint(intx,inty)//置坐标值{X=x;Y=y;//给数据成员赋值}intXcoord(){returnX;}//提供X坐

标值intYcoord(){returnY;}//提供Y坐标值voidMove(intxOffset,intyOffset);//移动点private:intX;intY;};voidTpoint::Move(intxOffset,intyOffset)

{X+=xOffset;Y+=yOffset;}类体外成员函数的定义内联成员函数的定义私有数据成员的定义修改时间:2011年3月C++程序设计—类和对象(一)252.对象的定义对象的定义格式对象成员的表示方法修改时间:2011年3月C++程序设计—类和对象(一)26对象的定义格式定义了一个

类只是定义了一种类型,它并不分配空间,不能进行操作。只有用它创建对象后,系统才为对象分配存储空间。对象是类的实例。(对象是一种广义变量?)定义对象之前要先定义好类。对象定义格式为:类类型名对象名表;如:students,t;//定义两个student类的对象s和tT

datedate1;//定义一个Tdate类的对象date1Tdate*Pdate=&date1;//定义一个指向date1对象空间的指针PdateTdatedata[3];//定义一个data对象数组,其元素类型为Tdate类date1Set()

Print()monthdayyear修改时间:2011年3月C++程序设计—类和对象(一)27对象成员的表示方法通过对象可以访问类中的公有类型数据和成员函数。其使用方式为:对象名.成员函数名对象名.数据成员例:date1.year=2002;date1.Print()

;通过指向类类型对象的指针访问类的公有数据成员和成员函数时。其使用方式为:指针名->数据成员或指针名->成员函数例:Tdatedate1;Tdate*Pdate=&date1;//指针指向对象date1Pdate1->

day=30;Pdate1->Print();类和对象关系如同整型int与整型变量i之间的关系。修改时间:2011年3月C++程序设计—类和对象(一)28注意:在成员函数中访问成员无须加对象名来作为前缀。如:voidTperson::prin

t()//自家人不客气{cout<<name<<age<<sex<<endl;}在name等成员之前不能加对象名,在定义类时,成员函数是所有对象共享的代码,不被某一个对象独占。也无法确定类的对象名。注意修改时间:2011年3月C++程序设计—类和对象(一)29…voidTperson::set(c

harn[],inta,chars){strcpy(name,n);age=a;sex=s;}voidmain(){Tpersons;Tpersont;s.set("li",23,'m');t.set("wang",21,'f');s.age=20;//errors.print();t.pri

nt();}tSet()Print()nameagesexwang21fwang21fsSet()Print()nameagesexli23mli23m修改时间:2011年3月C++程序设计—类和对象(

一)30一个类中所有对象调用的成员函数都是在同一代码段。那么成员函数如何区分调用的成员来自哪个对象呢?原来在对象调用s.set("li",23,'m');时,成员函数除了接受3个实参外,还接受了一个对象s的地址。如:TDate::Set(i

ntm,intd,inty)TDate::Set(TDate*this,intm,intd,inty)这个地址被一个隐含的形参this指针所获取,等同于执行了this=&s。所有对数据成员的访问都隐含加上了前缀

this->。所以:age=a;this->age=a;s.age=a;修改时间:2011年3月C++程序设计—类和对象(一)313.对象的初始化构造函数和析构函数缺省构造函数和缺省析构函数拷贝

初始化构造函数修改时间:2011年3月C++程序设计—类和对象(一)32构造函数和析构函数构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数的功能是在创建对象时给对象分配内存空间,并可使用给定值来初始化对象。析构函数的功能是用

来释放一个对象的已分配空间。并可在对象被清除前,完成一些清理工作。构造函数与析构函数的功能正好是对应的。修改时间:2011年3月C++程序设计—类和对象(一)33对前面的日期类进行修改,并将定义存放在tdate1.h文件中。如:classTDat

e1{public:TDate1(inty,intm,intd);~TDate1();voidPrint();private:intyear,month,day;};构造函数的说明析构函数的说明一般成员函数的说明函数名与类名一致,

无类型但可有参数名字与类名一致,前有~,无类型无参数修改时间:2011年3月C++程序设计—类和对象(一)34TDate1::TDate1(inty,intm,intd){year=y;month=m;day=d;cout<<"Constructorcalled.

\n";}TDate1::~TDate1(){cout<<"Destructorcalled.\n";}voidTDate1::Print(){cout<<year<<"."<<month<<"."<<day<<endl

;}构造函数的定义析构函数的定义一般函数的定义与其他成员函数定义一样,两种函数的定义可放在类体内,也可放在类体外修改时间:2011年3月C++程序设计—类和对象(一)35构造函数的特点有:程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。构造函数可以重载,即可定义多个

参数个数不同的函数构造函数有隐含的返回值,并由系统内部使用析构函数的特点有:一个类中只能定义一个析构函数,即不能重载析构函数可以被调用,也可系统调用被自动调用的情况有两种:在一个函数体内定义的一个对象,当函数结束时用new运算符动态创建的一个

对象,在使用delete释放时修改时间:2011年3月C++程序设计—类和对象(一)36#include<iostream.h>#include"tdate1.h"voidmain(){TDate1today(2007,4,1),tomorrow(200

7,4,2);cout<<"todayis";today.Print();cout<<"tomorrowis";tomorrow.Print();}执行程序后,输出结果为:将含有类定义的头文件包含进来对象定义时,自动调用构造函数函数结束时,自动调用析构ConstructorCalled.

ConstructorCalled.todayis2007.4.1tomorrowis2007.4.2Destructorcalled.Destructorcalled.修改时间:2011年3月C++程序设计—类和对象(一)37上机步骤1、建立Ne

wProject--->Win32ConsoleAppliciation--->C/C++HeaderFile;2、输入头文件内容并保存;3、New--->C++SourceFile,输入程序内容并保存;4、编译、构建、执行也可以先建立程序文件,编辑后再建立头文件,并将它加入工程即可

!注意:程序与头文件要在同一目录!修改时间:2011年3月C++程序设计—类和对象(一)38缺省构造函数和缺省析构函数在类定义中可以不定义任何构造函数,这时编译器会自动生成一个不带参数的缺省构造函数。其格式为:<类名>::<缺省构造函数名>(){}(何时不能缺省?)则在程序中定义一个对象而未

指明初始化时,编译器便按缺省构造函数来初始化该对象。同理,若一个类中未定义析构函数,编译系统也生成一个缺省析构函数。其格式为:<类名>::~<缺省析构函数名>(){}这也是前面的程序中可以没有构造和析构函

数的原因函数体内无代码,也可自定义一个无参的构造函数来替代缺省修改时间:2011年3月C++程序设计—类和对象(一)39如:classCExample{public:CExample();CExample(inti);CExample(intx,inty);pri

vate:intmember1,member2;};CExample::CExample(){member1=0;member2=0;}CExample::CExample(inti){member1=i;member2=0;}自定义无参构造函数重载构造函数注

:若有构造函数的重载,则不会生成缺省构造函数,须自定义无参构造函数!CExample(inti=8);可否?修改时间:2011年3月C++程序设计—类和对象(一)40对应调用相应的构造函数不带参数创建对象,调用无参构

造函数CExample::CExample(intx,inty){member1=x;member2=y;}voidmain(){CExampleex1;CExampleex2(1);CExampleex3(2,3);…}修改时间:2011年3月C++程序

设计—类和对象(一)41拷贝初始化构造函数构造函数除可以用基本数据类型初始化对象外,还可以使用已存在的同类型的对象即类类型的对象来初始化正在创建的对象。为此,必须在类中定义一个特殊的构造函数来完成这个工作,这个构造函数被称为拷贝初始化构造函数。它实现了在初始化时将一个

已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。当然,它具有一般构造函数的所有特性。格式为:<类名>::<拷贝初始化构造函数名>(<类名>&<引用名>){…}如:student::student(student&s){…}每个类中必须有一个。若类中未说明,则编译系统会自动生成缺

省函数。函数名同类名只有一个引用参数配钥匙修改时间:2011年3月C++程序设计—类和对象(一)42classCMyClass{public:CMyClass(intx=0);CMyClass(CMyClass

&c);//……private:intmember;};CMyClass::CMyClass(intx){member=x;}CMyClass::CMyClass(CMyClass&c){member=c.member;}拷贝初始化构造函数带缺省值的构造函数

修改时间:2011年3月C++程序设计—类和对象(一)43拷贝初始化构造函数被自动调用有三种情况:一、是用一个已知对象初始化一个新对象时。二、是以值调用方式向一个函数传递对象参数时。如:voidfun(CMyClassa)

;voidmain(){CMyClassa;CMyClassb(3);CMyClassc(b);…fun(c);}调用拷贝初始化构造函数调用带缺省值的构造函数调用带缺省值的构造函数结果为:a.member:0b.member:3c.member:3fun中的形参a中的数据成员a.memb

er:3调用拷贝初始化构造函数修改时间:2011年3月C++程序设计—类和对象(一)44三、当对象作为函数返回值时。如:studentfn(){studentms("randy");//创建一个ms对象returnms;//将ms对象作为返回值}voidmain(){st

udents;//创建一个s对象s=fn();…}则返回的ms对象将产生一个临时对象。系统调用拷贝构造函数将ms拷贝到新创建的临时对象中。当fn()返回时产生的临时对象拷贝给s后,临时对象被析构。修改

时间:2011年3月C++程序设计—类和对象(一)45classCPoint{floatx,y;//未指明的是privatepublic:CPoint(floata,floatb);CPointAdd(CPointA);……};CPoi

nt::CPoint(floata,floatb){x=a;y=b;}CPoint::Add(CPointA){CPointB;B.x=x+A.x;B.y=y+A.y;returnB;}修改时间:2011年3月C++程序设计—类和对象(一)464.成员函数的特性内联函数和外联函

数成员函数的重载性设置参数的缺省值修改时间:2011年3月C++程序设计—类和对象(一)47内联函数和外联函数内联函数:指定义在类体内的成员函数。外联函数:指说明在类体内,定义在类体外的成员函数。类外定义的函数缺省情况下都是外联函数,用关键字inline可以强制转

换。对于内联函数,不是在调用时才转去执行函数体,而是在编译时对所有调用该函数的地方装入实际的函数代码。节省了调用开销,提高了运行速度。内联函数必须在调用之前进行定义。修改时间:2011年3月C++程序设计—类和

对象(一)48classCRectangle{floatheight,width;public:voidSetHeight(floatx)//内联函数之一{height=x;}voidSetWidth(floaty);};inlinevo

idCRectangle::SetWidth(floaty){width=y;}//内联函数之二修改时间:2011年3月C++程序设计—类和对象(一)49一般的成员函数都可以进行重载。构造函数可以,但析构函数不能。(

至少参数类型或个数不同)C++会根据说明中的参数选择合适的重载函数。例如:#include<iostream.h>classtdate{public:tdate();tdate(intd);tdate(intm,intd)

;private:intmonth;intday;intyear;};tdate::tdate(){month=4;day=5;year=1995;}tdate::tdate(intd){month=4;d

ay=d;year=1995;}tdate::tdate(intm,intd){month=m;day=d;year=1995;}voidmain(){tdateaday,bday(10),cday(2,12);}重载性修改时间:2011年3月C++程序设计—类和对象(一)50一般

的成员函数可以被设置参数的缺省值。构造函数也可以,但析构函数无参数,也不能。C++在调用时会根据函数的形参型式配于相应的实参值。例如:classCRectangle//缺省参数按从右往左的方式{CRectangle(in

tWidth=10,intHeight=5);//……};设置参数的缺省值函数设臵参数的缺省值时要避免二义性!修改时间:2011年3月C++程序设计—类和对象(一)515.静态成员静态数据成员静态成员函数修改时间:2011年3月C++程

序设计—类和对象(一)52静态数据成员若想在同一个类的多个对象之间共享某个数据。可将该类成员声明为static,使之成为静态成员。而一般成员是在对象创建时由构造函数分配空间,属于具体的某个对象,对象不同则成员空间也不同,并在函数结束时由析构函数释放对象空间而随之释放。例如:一个学生

类,有一个对应学生总数属性的数据成员count。则对于每一个已有学生对象而言,一旦现有学生人数变化,那么已有学生对象中count所保存的数据就不适用,则要对每个对象逐个修改,显然这是不实际的。而应采用静态成员。静态成员是在编译时被创建,其空间只有一

个,且与对象是否存在无关,可为所有以后创建的该类对象共享。并且空间一直保存到程序结束。修改时间:2011年3月C++程序设计—类和对象(一)53成员有数据成员和成员函数之分,静态成员也有静态数据成员和静态成员函数之分。静态数据成员的定义同一般的成员函数的定义相似,由说明部分和

定义部分两部分组成:说明部分为:static数据类型成员名;定义部分为:数据类型类名::成员名=初始值;如:classCTest{public:staticintcount;//说明部分在类体内};intCTest::

count=0;//定义部分在类体外注意:必须在定义时进行初始化。修改时间:2011年3月C++程序设计—类和对象(一)54定义好静态数据成员后,该成员不属于任何一个对象,引用它的格式也要注意与引用一般成员的区别:类名::静态成员名//而一般成员的引用格式为:对

象名.成员名如:#include<iostream.h>classCTest{public:staticintcount;voidSet(intw);voidDisplay();};intCTest::co

unt=0;在public中,可被类外函数引用,若在private中,则只能被成员函数或友元引用修改时间:2011年3月C++程序设计—类和对象(一)55voidCTest::Set(intw){count+=w;}voidC

Test::Display(){cout<<"count="<<count<<endl;}voidmain(){CTesta,b;a.Set(10);cout<<"Operatingona:";a.Di

splay();b.Set(10);cout<<"Operatingonb:";b.Display();cout<<"Operatingona:";a.Display();}运行结果:Operatingona:count=10Operat

ingonb:count=20Operatingona:count=20在同类的成员函数中引用,可省略类名::CTest::count修改时间:2011年3月C++程序设计—类和对象(一)56静态成员函数的定义及用法同静态数据成员相似。

静态成员函数属于类,而不是对象成员(无this指针用来存放对象的地址),对静态成员的引用不需用对象名,也不能直接引用具体对象中的非静态成员。须使用(对象名.成员名)来引用。如:classM{public:M(inta){A=a;}stat

icvoidf1(Mm);private:intA;staticintB;};intM::B=0;voidM::f1(Mm){cout<<m.A<<B<<endl;}voidmain(){Mp(5);M::f1(p);}静态成员函数静态成员声明静态成员定义引用静态数据成员引用非静态成员引用

静态成员函数修改时间:2011年3月C++程序设计—类和对象(一)57classstudent{public:staticintnumber(){returnnoofstudents;}private:charname[10];st

aticintnoofstudents;};intstudent::noofstudents=1;voidmain(){students;cout<<student::number()<<endl;}例

如:修改时间:2011年3月C++程序设计—类和对象(一)586.友元友元函数友元类修改时间:2011年3月C++程序设计—类和对象(一)59友元函数类的私有成员只能由本类的成员访问,外部函数只能访问类的成员函数,再由成员函数访问类的私有成员。但是,如

果在某个类定义中用friend说明一个外部函数后,这个外部函数就可直接访问该类的任何私有成员。则该外部函数称为这个类的友元函数。采用友元的目的主要是为提高效率。显然它破坏了类的封装性。注意:在某个类中说明的友元函数并不是该类的成员函

数。它可以是外部的一个独立函数,也可以是另外一个类中的成员函数。修改时间:2011年3月C++程序设计—类和对象(一)60classA{private:voidfunc1(){…}friendvoidgFunc1(A&p);//声明友元函数

};友元为外部的独立函数voidgFunc1(A&p)//定义外部友元函数,使用类对象引用作参数//注:不是成员函数不加类名::{…p.func1();//友元的使用,调用私有成员…}voidgFunc2(A*p){…p.func1();//错误,gFunc2不是A的友元…}修改时间:2

011年3月C++程序设计—类和对象(一)61classB;classA{intF1(B&b);//类中使用另一个类对象须先有其说明intF2(B&b);};classB{private:intm;friendintA

::F1(B&b)//把A中F1说明为友元};//类B中的一个函数intA::F1(B&b){returnb.m;}//正确:友元访问私有成员IntA::F2(B&b){returnb.m;}//错误:A中F2不是友元友元为另一个类的成员函数修改时间:2011年3月C+

+程序设计—类和对象(一)62友元类即一个类作为另一个类的友元。这意味着这个类的所有成员函数都是另一个类的友元函数。这只需先声明而不一定需要先定义。但这种友元关系是单向的,并只在两个类之间有效。如:classX{friendclassY;public:…private:…};classY{…

}//则Y中的所有成员函数都可引用X中的任何成员。修改时间:2011年3月C++程序设计—类和对象(一)637.局部类和嵌套类局部类嵌套类修改时间:2011年3月C++程序设计—类和对象(一)64局部类在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联

系。注意:局部类中不能说明静态成员函数,且成员函数须为内联函数。即函数体定义在类体内。inta;voidfun(){staticints;classA{public:voidinitialize(inti

){s=i;}};Am;m.initialize(10);}修改时间:2011年3月C++程序设计—类和对象(一)65嵌套类在一个类中定义的类称为嵌套类。定义嵌套类的类称为外围类。其目的只是在语法上强调了两

个类之间的主从关系。而在使用上还是遵从各自的访问权限,引用是相互独立。classA{public:classB{public:…//不能引用A中私有成员private:…};voidf();//不能引用B中私有成员private:inta;};修改时间:2011年3月C+

+程序设计—类和对象(一)66#include<iostream>usingnamespacestd;classArray_max//声明类{public://以下3行为成员函数原型声明voidset_value();/

/对数组元素设臵值voidmax_value();//找出数组中的最大元素voidshow_value();//输出最大值private:intarray[10];//整型数组intmax;//max用来存放最大值};举例1:用类来实现找出一个整型数组中的元素的最大值修改

时间:2011年3月C++程序设计—类和对象(一)67voidArray_max∷set_value(){inti;for(i=0;i<10;i++)cin>>array[i];}voidArray_max∷max_value(){inti;max=array[0];f

or(i=1;i<10;i++)if(array[i]>max)max=array[i];}voidArray_max∷show_value(){cout<<"max="<<max;}intmain(){Array_m

axarrmax;arrmax.set_value();//向数组元素输入数值arrmax.max_value();//找出数组元素中的最大值arrmax.show_value();//输出数组元素中的最大值return0;}用类来实现找出一个整型数组中的元素的最大值修

改时间:2011年3月C++程序设计—类和对象(一)68学生有(num、name、score[3])等信息,用类来编写程序,要求:1、能进行学生信息的初始化;2、能实现n个学生数据的输入;3、能自动计算学生的平均成绩;4、可打印学生的上述信息;5、找到成绩最好的学

生并输出其信息;6、能求出每门课程的平均分数。举例2:修改时间:2011年3月C++程序设计—类和对象(一)69分析:1、定义一个学生类,其中有num、name、score[3]、average,作为私有成员2、设计构造函数来作初

始化,设计一个输入及打印函数、还想设计一个计算学生平均分的函数,作为公有成员函数等信息,用类来编写程序,要求:3、主程序中,通过循环来找到成绩最好的学生,并调用对象中的打印函数输出其信息;4、在主程序中,求出每门课

程的平均分数,并输出。Chapter6_1.cpp

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?