




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-3类与对象1第二章第二章 类和对象类和对象 面向对象的程序设计面向对象的程序设计2022-3-3类与对象2按钮对象按钮对象:按钮的内容、大小,按钮的字体、图案按钮的内容、大小,按钮的字体、图案等等等等针对按钮的各种操作,创建、单击、双针对按钮的各种操作,创建、单击、双击、拖动等击、拖动等2022-3-3类与对象3班级对象班级对象:班级的静态特征,所属的系:班级的静态特征,所属的系和专业、班级的人数,所在的教室等。和专业、班级的人数,所在的教室等。这种静态特征称为这种静态特征称为属性属性;班级的动态特征,如学习、开会、体育班级的动态特征,如学习、开会、体育比赛等,这种动态特征称为比
2、赛等,这种动态特征称为行为行为。 2022-3-3类与对象4 任何一个对象都应当具有这两个要素任何一个对象都应当具有这两个要素一是属性一是属性(attribute);二是行为二是行为(behavior),即能根据外界给的,即能根据外界给的信息进行相应的操作。信息进行相应的操作。对象是由一组属性和一组行为构成的。对象是由一组属性和一组行为构成的。 2022-3-3类与对象5 使用面向对象的程序设计方法设使用面向对象的程序设计方法设计一个复杂的软件系统时,计一个复杂的软件系统时,首要的问题首要的问题是确定该系统是由哪些对象组成的,并是确定该系统是由哪些对象组成的,并且设计这些对象。且设计这些对象。
3、 在在C+中,中,每个对象都是由数据和每个对象都是由数据和函数函数(即操作代码即操作代码)这两部分组成的。这两部分组成的。 2022-3-3类与对象6 在一个系统中的多个对象之间通在一个系统中的多个对象之间通过一定的渠道相互联系,如图示意。要过一定的渠道相互联系,如图示意。要使某一个对象实现某一种行为使某一个对象实现某一种行为(即操作即操作),应当向它传送相应的消息。对象之间就应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的。是这样通过发送和接收消息互相联系的。2022-3-3类与对象7抽象,封装,继承,多态。抽象,封装,继承,多态。2022-3-3类与对象8n所谓所谓“封
4、装封装”,指两方面的含义:,指两方面的含义:n 一是将有关的数据和操作代码封装在一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。对象之间相对独立,互不干扰。n二是将对象中某些部分对外隐蔽,即隐二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。与外界联系,接收外界的消息。封装封装2022-3-3类与对象9抽象抽象n抽象的过程是将有关事物的共性归纳、抽象的过程是将有关事物的共性归纳、集中的过程。集中的过程。n类是对象的抽象,而对象则是类的特
5、类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。例,或者说是类的具体表现形式。2022-3-3类与对象10继承与重用继承与重用nC+提供了继承机制,采用继承的方法提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一可以很方便地利用一个已有的类建立一个新的类。这就是常说的个新的类。这就是常说的“软件重软件重用用”(software reusability) 的思想。的思想。n例如:例如:“白马白马”继承了继承了“马马”的基本特的基本特征,又增加了新的特征征,又增加了新的特征(颜色颜色),“马马”是父类,或称为基类,是父类,或称为基类,“白马白马”是从是从“马马”派生出来
6、的,称为子类或派生类。派生出来的,称为子类或派生类。2022-3-3类与对象11多态性多态性n在在C+中,所谓多态性中,所谓多态性(polymorphism)是指:是指: 由继承而产生的相关的不同的由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性重要特征,能增加程序的灵活性。2022-3-3类与对象12传统的面向过程程序设计是围绕功能进传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。行的,用一个函数实现一个功能。所有所有的数据都是公用的的
7、数据都是公用的,一个函数可以使用,一个函数可以使用任何一组数据,而一组数据又能被多个任何一组数据,而一组数据又能被多个函数所使用。程序设计者必须考虑每一函数所使用。程序设计者必须考虑每一个细节,什么时候对什么数据进行操作个细节,什么时候对什么数据进行操作 。2022-3-3类与对象13面向对象程序设计采取的是另外一面向对象程序设计采取的是另外一种思路。它面对的是一个个对象。种思路。它面对的是一个个对象。实际上,每一组数据都是有特定的实际上,每一组数据都是有特定的用途的,是某种操作的对象。也就用途的,是某种操作的对象。也就是说,是说,一组操作调用一组数据一组操作调用一组数据。 2022-3-3类
8、与对象14程序设计者的任务包括两个方程序设计者的任务包括两个方面:面:一是设计所需的各种类和对象,一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送起;二是考虑怎样向有关对象发送消息,以完成所需的任务。消息,以完成所需的任务。各个对象的操作完成了,整体各个对象的操作完成了,整体任务也就完成了。任务也就完成了。 2022-3-3类与对象15因此人们设想把相关的数据和因此人们设想把相关的数据和操作放在一起,形成一个整体,与操作放在一起,形成一个整体,与外界相对分隔外界相对分隔。这就是面向对象的。这就是面向对象的程序设计中的对象。程
9、序设计中的对象。 2022-3-3类与对象16程序程序= =算法数据结构算法数据结构在面向过程的结构化程序设计中,在面向过程的结构化程序设计中,人们常使用这样的公式来表述程人们常使用这样的公式来表述程序序 2022-3-3类与对象17对象对象 = = 算法算法 数据结构数据结构程序程序=(=(对象对象+ +对象对象+ +对象对象+ +)+)+消息消息 消息的作用就是对对象的控制。消息的作用就是对对象的控制。 程序设计的关键是设计好每一程序设计的关键是设计好每一个对象以及确定向这些对象发出的个对象以及确定向这些对象发出的命令,使各对象完成相应的操作。命令,使各对象完成相应的操作。 面向对象的程序
10、组成:面向对象的程序组成:2022-3-3类与对象18每一个实体都是对象。有一些对象是具每一个实体都是对象。有一些对象是具有相同的结构和特性的。有相同的结构和特性的。 每个对象都属于一个特定的类型。每个对象都属于一个特定的类型。 在在C+C+中对象的类型称为类中对象的类型称为类( (class)class)。类代类代表了某一批对象的共性和特征。表了某一批对象的共性和特征。类是对象类是对象的抽象,而对象是类的具体实例的抽象,而对象是类的具体实例( (instance)instance)。 2022-3-3类与对象19类是一种复杂的数据类是一种复杂的数据类型类型,它是将,它是将不同不同类型的数据类
11、型的数据和和与这些数据相关的运算与这些数据相关的运算封封装在一起的装在一起的 集合体。集合体。类的定义类的定义类将一些数据及与数据相关的类将一些数据及与数据相关的函数函数封装封装在一起,使类中的数据得到很好的在一起,使类中的数据得到很好的“保保护护”。在大型程序中不会被随意修改。在大型程序中不会被随意修改。2022-3-3类与对象20类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;关键字关键字类名类名私有私有公有公有
12、保护保护class Student private : char Name20; float Math; float Chinese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void);分号不能少分号不能少2022-3-3类与对象21用关键字用关键字priviate限定的成员称为限定的成员称为私有成私有成员员,对私有成员,对私有成员限定在该类的内部使用限定在该类的内部使用,即即只允许该类中的成员
13、函数使用私有的只允许该类中的成员函数使用私有的成员数据成员数据,对于,对于私有的成员函数私有的成员函数,只能,只能被被该类内的成员函数调用该类内的成员函数调用;类就相当于;类就相当于私有成员的作用域。私有成员的作用域。 2022-3-3类与对象22用关键字用关键字public限定的成员称为限定的成员称为公有公有成员成员,公有成员的数据或函数不受,公有成员的数据或函数不受类的限制,类的限制,可以在类内或类外自由可以在类内或类外自由使用使用;对类而言是透明的。;对类而言是透明的。2022-3-3类与对象23而用关键字而用关键字protected所限定的成员所限定的成员称为称为保护成员保护成员,只允
14、许在类内及该,只允许在类内及该类的派生类中使用保护的数据或函类的派生类中使用保护的数据或函数。即保护成员的作用域是数。即保护成员的作用域是该类及该类及该类的派生类该类的派生类。2022-3-3类与对象24私有成员私有成员 公有成员公有成员 保护成员保护成员类内函数类内函数 可以调用可以调用 可以调用可以调用 可以调用可以调用类外函数类外函数 不可调用不可调用 可以调用可以调用 不可调用不可调用私有函数私有函数 公有函数公有函数 保护函数保护函数类内函数类内函数 可以调用可以调用 可以调用可以调用 可以调用可以调用类外函数类外函数 不可调用不可调用 可以调用可以调用 不可调用不可调用2022-3
15、-3类与对象25每一个限制词每一个限制词(private等等)在类体中在类体中可使用多次。一旦使用了限制词,可使用多次。一旦使用了限制词,该限制词一直有效,直到下一个限该限制词一直有效,直到下一个限制词开始为止。制词开始为止。如果未加说明,类中成员默认的访问如果未加说明,类中成员默认的访问权限是权限是private,即私有的。即私有的。2022-3-3类与对象26class Studentchar Name20;float Math;float Chiese; public :float average; void SetName(char *name);void SetMath(float
16、math);void SetChinese(float ch); float GetAverage(void);均为私有权限均为私有权限均为公有权限均为公有权限2022-3-3类与对象27class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;xySetxy()Print()A私有数据私有数据公有函数公有函数在在类外不能直接使用类外不能直接使用 x 或或 y ,必须通过必须通过Setxy()给给 x 或或 y 赋值,通过赋值,通过Print()输出输出 x
17、或或 y 。2022-3-3类与对象28成员函数与成员数据的定义不分先后,可以成员函数与成员数据的定义不分先后,可以先说明先说明函数原型函数原型,再在类体外定义函数体。,再在类体外定义函数体。class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;在类体内定在类体内定义成员函数义成员函数2022-3-3类与对象29class A float x, y; public: void Setxy(float a,float b); void Print(void)
18、;;void A:Setxy(float a,float b) x=a; y=b; void A:Print(void) coutxtyendl; 在类体内说明在类体内说明成员函数原型成员函数原型在类体外定在类体外定义成员函数义成员函数2022-3-3类与对象30 : (). /函数体函数体在类体外定义成员函数的格式:在类体外定义成员函数的格式:void A:Setxy(float a,float b) x=a; y=b; 函数类型函数类型类名类名函数名函数名形参列表形参列表函数体函数体2022-3-3类与对象31在定义一个类时,要注意如下几点:在定义一个类时,要注意如下几点:1、类具有封装性
19、,类只是定义了一种结构、类具有封装性,类只是定义了一种结构.2、在定义类时,只是定义了一种导出的数据、在定义类时,只是定义了一种导出的数据类型,类型,并不为类分配存储空间并不为类分配存储空间,所以,在定义,所以,在定义类中的数据成员时,类中的数据成员时,不能对其初始化不能对其初始化。如:。如:class Test int x=5,y=6; /是不允许的是不允许的 extern float x; /是不允许的是不允许的 ;2022-3-3类与对象32在在C+语言中,语言中,结构体类型结构体类型只是类的只是类的一个特例。一个特例。结构体类型与类的唯一的区别在于:结构体类型与类的唯一的区别在于:在类
20、中,其成员的缺省的存取权限是在类中,其成员的缺省的存取权限是私有的;而在结构体类型中,其成员私有的;而在结构体类型中,其成员的缺省的存取权限是公有的。的缺省的存取权限是公有的。 2022-3-3类与对象33 内联成员函数内联成员函数 当我们定义一个类时,当我们定义一个类时,可以可以在类中直在类中直接定义函数体接定义函数体。这时成员函数在编译。这时成员函数在编译时是作为时是作为内联函数内联函数来实现的。来实现的。 同时,我们也可以在类体外定义类的同时,我们也可以在类体外定义类的内联成员函数。在类体内说明函数,内联成员函数。在类体内说明函数,在类体外定义时,在成员函数的定义在类体外定义时,在成员函
21、数的定义前面加上关键字前面加上关键字inline。 2022-3-3类与对象34class A float x, y; public: void Setxy(float a,float b); void Print(void);;inline void A:Setxy(float a,float b) x=a; y=b; inline void A:Print(void) coutxtyendl; 说明该成员函数为内联说明该成员函数为内联2022-3-3类与对象35对象对象只有在定义了属于类的变量后,系统才只有在定义了属于类的变量后,系统才会为会为类的变量类的变量分配空间。分配空间。在定义类时
22、,只是定义了一种在定义类时,只是定义了一种数据类型数据类型,即即说明程序中可能会出现该类型的数据,说明程序中可能会出现该类型的数据,并不为类分配存储空间。并不为类分配存储空间。类的变量我们称之为类的变量我们称之为对象对象。2022-3-3类与对象36对象是类的实例对象是类的实例,定义对象之前,一,定义对象之前,一定要先说明该对象的类。定要先说明该对象的类。不同对象占据内存中的不同区域,它不同对象占据内存中的不同区域,它们所保存的数据各不相同,但们所保存的数据各不相同,但对数据对数据成员进行操作的成员函数的程序代码成员进行操作的成员函数的程序代码均是一样的均是一样的。 2022-3-3类与对象3
23、7 类名类名 对象对象1,对象,对象2, .;Student st1,st2; 对象的定义格式:对象的定义格式:类名类名对象名对象名在建立对象时,只为对象分配用于保在建立对象时,只为对象分配用于保存数据成员的内存空间,存数据成员的内存空间,而成员函数而成员函数的代码为该类的每一个对象所共享的代码为该类的每一个对象所共享。 2022-3-3类与对象38在在C+编译系统中,每个对象所占用的存编译系统中,每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储储空间,而不包括函数代码所占用的存储空间。调用各对象的函数时,都去调用公
24、空间。调用各对象的函数时,都去调用公用的函数代码。用的函数代码。2022-3-3类与对象39n如果声明了一个类:如果声明了一个类:class Time public: int hour; int minute; int sec; void set( ) cinabc;用下面的语句来输出该类对象所占用的字节数:用下面的语句来输出该类对象所占用的字节数:coutsizeof(Time)endl;输出的值是输出的值是12。2022-3-3类与对象40对象的使用对象的使用一个对象的成员就是该对象的类所定一个对象的成员就是该对象的类所定义的成员,有义的成员,有成员数据和成员函数成员数据和成员函数,引用时
25、同结构体变量类似,用引用时同结构体变量类似,用“.”运运算符。算符。2022-3-3类与对象41class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;2022-3-3类与对象42void main(void) A a1,a2; /定义对象定义对象 a1.m=10; a1.n=20; /为公有成员数据赋值为公有成员数据赋值 a1.Setxy(2.0 , 5.0); /为私有成员数据赋值为私有成员数据赋值 a1.Print();Prin
26、t()Setxy()a1nmyxPrint()Setxy()a2nmyx10202.05.0输出:输出: 2.0 5.02022-3-3类与对象43例例2:class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;必须通过类内公有函必须通过类内公有函数访问私有数据成员数访问私有数据成员2022-3-3类与对象44void main(void) A a1,a2; a1.m=10; a1.n=20;/为公有成为公有成员数据赋值员数据赋值 a
27、1.x=2; a1.y=5; a1.Setxy(2.0,5.0); a1.Print();非法,私有成员非法,私有成员不能在类外访问不能在类外访问2022-3-3类与对象45同类型的对象之间可以整体赋值,这同类型的对象之间可以整体赋值,这种赋值与对象的成员的访问权限无关。种赋值与对象的成员的访问权限无关。class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;2022-3-3类与对象46void main(void) A a1,a2;
28、 a1.m=10; a1.n=20;/为公有成为公有成员数据赋值员数据赋值 a1.Setxy(2.0,5.0); a2=a1; a1.Print(); a2.Print();同类型的对象之同类型的对象之间可以整体赋值间可以整体赋值相当于成员数相当于成员数据间相互赋值据间相互赋值2022-3-3类与对象47对象可以作函数的入口参数(实参、形对象可以作函数的入口参数(实参、形参),也可以作函数的出口参数。这与参),也可以作函数的出口参数。这与一般变量作为函数的参数是完全相同的。一般变量作为函数的参数是完全相同的。 可以定义类类型的指针,类类型的引用,可以定义类类型的指针,类类型的引用,对象数组,指
29、向类类型的指针数组和指向对象数组,指向类类型的指针数组和指向一维或多维数组的指针变量一维或多维数组的指针变量 一个类的对象,可作为另一个类的成员一个类的对象,可作为另一个类的成员 2022-3-3类与对象48class Time public: /数据成员是公用的数据成员是公用的 int hour; int minute;通过指向对象的指针访问对象中的成员通过指向对象的指针访问对象中的成员2022-3-3类与对象49Time t,*p; /定义对象定义对象t和指针变量和指针变量pp=&t; /使使p指向对象指向对象tcouthour; /输出输出p指向的对象中的成员指向的对象中的成员h
30、our在在p指向指向t的前提下,的前提下,p-hour,(*p).hour和和t.hour三者等价。三者等价。2022-3-3类与对象50通过对象的引用变量来访问对象中的成员通过对象的引用变量来访问对象中的成员如果已声明了如果已声明了Time类,并有以下定义语句:类,并有以下定义语句: Time t1; /定义对象定义对象t1Time &t2=t1; /定义定义Time类引用变量类引用变量t2,并使之初始化为并使之初始化为t1coutt2.hour; /输出对象输出对象t1中的成员中的成员hour由于由于t2与与t1共占同一段存储单元共占同一段存储单元(即即t2是是t1的别名的别名),
31、因此因此t2.hour就是就是t1.hour。2022-3-3类与对象51类声明和成员函数定义的分离类声明和成员函数定义的分离n在面向对象的程序开发中,一般做法是在面向对象的程序开发中,一般做法是将类的声明将类的声明(其中包含成员函数的声明其中包含成员函数的声明)放在指定的头文件中,用户如果想用该放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可类,只要把有关的头文件包含进来即可n为了实现信息隐蔽,对类成员函数的定为了实现信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一义一般不放在头文件中,而另外放在一个文件中。个文件中。2022-3-3类与对象52例如,可以分别
32、写两个文件:例如,可以分别写两个文件: /student.h (这是头文件,在此文件中进行类的声明这是头文件,在此文件中进行类的声明)class Student /类声明类声明 public: void display( ); /公用成员函数原型声明公用成员函数原型声明private: int num; char name20; char sex; ;2022-3-3类与对象53/student.cpp /在此文件中进行函数的定义在此文件中进行函数的定义#include #include student.h/不要漏写此行,否则编不要漏写此行,否则编译通不过译通不过void Student di
33、splay( ) /在类在类外定义外定义display类函数类函数coutnum:numendl; coutname:nameendl; coutsex:sexendl; 2022-3-3类与对象54为了组成一个完整的源程序,还应当有包为了组成一个完整的源程序,还应当有包括主函数的源文件:括主函数的源文件: /main.cpp 主函数模块主函数模块#include #include student.h int main( )Student stud; /定义对象定义对象stud.display( ); /执行执行stud对象的对象的display函数函数return 0;2022-3-3类与对
34、象55 由于将头文件由于将头文件student.h放在用户当前目放在用户当前目录中,因此在文件名两侧用双撇号包起来录中,因此在文件名两侧用双撇号包起来(student.h)而不用尖括号而不用尖括号(),否则编译时找不到此文件。否则编译时找不到此文件。2022-3-3类与对象56面向对象程序设计中的几个名词面向对象程序设计中的几个名词n类的成员函数在面向对象程序理论中类的成员函数在面向对象程序理论中被称为被称为“方法方法”(method),“方法方法”是指对数据的操作。是指对数据的操作。n外界是通过发外界是通过发“消息消息”来激活有关方来激活有关方法的。所谓法的。所谓“消息消息”,其实就是一个,
35、其实就是一个命令,由程序语句来实现。命令,由程序语句来实现。n例如:例如:语句语句“stud.display( );”是消息。是消息。stud是对象,是对象,display( )是方法,是方法,2022-3-3类与对象57类和对象的简单应用举例类和对象的简单应用举例#include using namespace std;class Time /定义定义Time类类public: /数据成员为公用的数据成员为公用的 int hour; int minute; int sec;2022-3-3类与对象58int main( ) Time t1; /定义定义t1为为Time类对象类对象cint1.
36、hour; /输入设定的时间输入设定的时间cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.secendl; /输出时间输出时间return 0;2022-3-3类与对象59引用多个对象的成员引用多个对象的成员#include using namespace std;class Timepublic:int hour;int minute;int sec;2022-3-3类与对象60int main( )void set_time(Time& t); /函数声明函数声明void show_time(Time& t); /函数声明函数
37、声明Time t1; /定义定义t1为为Time类对象类对象set_time(t1); show_time(t1); Time t2; /定义定义t2为为Time类对象类对象set_time(t2); show_time(t2); return 0;2022-3-3类与对象61void set_time(Time& t) /定义函数定义函数set_time,形参形参t是引用变量是引用变量 cint.hour; /输入设定的时间输入设定的时间 cint.minute; cint.sec;void show_time(Time& t) /定义函数定义函数show_time,形参形参
38、t是引用变量是引用变量coutt.hour:t.minute:t.secendl; 2022-3-3类与对象62可以对上面的程序作一些修改,数据成员的值可以对上面的程序作一些修改,数据成员的值不再由键盘输入,而在调用函数时由实参给不再由键盘输入,而在调用函数时由实参给出,并在函数中使用默认参数。出,并在函数中使用默认参数。int main( ) void set_time(Time&,int hour=0,int minute=0,int sec=0); /函数声明函数声明void show_time(Time&); Time t1;set_time(t1,12,23,34);
39、 show_time(t1);. 2022-3-3类与对象63void set_time(Time& t,int hour,int minute,int sec) t.hour=hour;t.minute=minute;t.sec=sec;void show_time(Time& t).2022-3-3类与对象64n以上两个程序中定义的类都只有数据以上两个程序中定义的类都只有数据成员,没有成员函数,这显然没有体成员,没有成员函数,这显然没有体现出使用类的优越性。在下面的例子现出使用类的优越性。在下面的例子中,类体中就包含了成员函数。中,类体中就包含了成员函数。2022-3-3类
40、与对象65#include using namespace std;class Timepublic: /公用成员函数公用成员函数 void set_time( ); void show_time( ); private: /数据成员为私有数据成员为私有 int hour; int minute; int sec;2022-3-3类与对象66int main( )Time t1; /定义对象定义对象t1 t1.set_time( ); t1.show_time( ); Time t2; /定义对象定义对象t2t2.set_time( ); t2.show_time( ); return 0;2
41、022-3-3类与对象67void Time set_time( ) cinhour; cinminute; cinsec;void Time show_time( ) couthour:minute:secendl;2022-3-3类与对象68注意:注意: (1) 在主函数中调用两个成员函数时,应指在主函数中调用两个成员函数时,应指明对象名明对象名(t1,t2)。表示调用的是哪一个对表示调用的是哪一个对象的成员函数。象的成员函数。(2) 在类外定义函数时,应指明函数的作用在类外定义函数时,应指明函数的作用域域(如如void Time set_time( )。在成员在成员函数引用本对象的数据成
42、员时,只需直接函数引用本对象的数据成员时,只需直接写数据成员名,这时写数据成员名,这时C+系统会把它默认系统会把它默认为本对象的数据成员。也可以显式地写出为本对象的数据成员。也可以显式地写出类名并使用域运算符。类名并使用域运算符。(3) 应注意区分什么场合用域运算符应注意区分什么场合用域运算符“ ”,什么场合用成员运算符,什么场合用成员运算符“.”,不要搞混。不要搞混。2022-3-3类与对象69例例:找出一个整型数组中的元素的找出一个整型数组中的元素的最大值。最大值。#include using namespace std;class Array_max /声明类声明类public: /以下
43、以下3行为成员函数原型声明行为成员函数原型声明void set_value( ); /对数组元素设置值对数组元素设置值void max_value( ); /找出数组中的最大元素找出数组中的最大元素void show_value( ); /输出最大值输出最大值private:int array10; /整型数组整型数组int max; /max用来存放最大值用来存放最大值;2022-3-3类与对象70void Array_max set_value( ) /成员函数定义,向数组元素输入数值成员函数定义,向数组元素输入数值 int i; for (i=0;iarrayi;2022-3-3类与对象
44、71void Array_max max_value( ) /成员函数定义,找数组元素中的最大值成员函数定义,找数组元素中的最大值 int i; max=array0; for (i=1;imax) max=arrayi;2022-3-3类与对象72void Array_max show_value( ) /成员函数定义,输出最大值成员函数定义,输出最大值 coutmax=max;2022-3-3类与对象73int main( ) Array_max arrmax; arrmax.set_value( ); arrmax.max_value( ); arrmax.show_value( );
45、return 0;2022-3-3类与对象74n定义成员函数只是设计了一组操作代码,定义成员函数只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地并未实际执行,只有在被调用时才真正地执行这一组操作。执行这一组操作。n主函数很简单,语句很少,只是调用有关主函数很简单,语句很少,只是调用有关对象的成员函数,去完成相应的操作。在对象的成员函数,去完成相应的操作。在大多数情况下,主函数中甚至不出现控制大多数情况下,主函数中甚至不出现控制结构结构(判断结构和循环结构判断结构和循环结构),而在成员函,而在成员函数中使用控制结构。数中使用控制结构。n在面向对象的程序设计中,最关键的工作在面向对象的程序设计中,最关键的工作是类的设计。所有的数据和对数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务分包合同实例
- 专业体育用品零售连锁店采购合同
- 《医疗质量管理体系》课件
- 五方股权转让合同
- 日文离婚协议书
- 转租广告位合同协议
- 死亡享保协议书
- 车辆座套广告合同协议
- 超市租赁装修合同协议
- 旱厕承包协议书
- 2024年浙江省仙居县事业单位公开招聘教师岗笔试题带答案
- 2025年地理高考复习 专题05“演变过程类”选择题答题技巧(解析版)
- 软切片安全挑战-全面剖析
- 儿童性早熟课件
- 生活垃圾合同终止协议
- 运动康复与体能训练理疗中心商业计划书
- 山东能源电力集团招聘笔试题库2025
- 医疗技术品牌的创新与传播策略
- 湖北省武汉市2025届高中毕业生四月调研考试生物试题及答案(武汉四调)
- 陪护公司管理制度规范
- 2024年天津卷高考语文真题含解析
评论
0/150
提交评论