面向对象C 第四章优秀课件.ppt
《面向对象C 第四章优秀课件.ppt》由会员分享,可在线阅读,更多相关《面向对象C 第四章优秀课件.ppt(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象面向对象C第四章第四章第1页,本讲稿共108页4.1.1定义类定义类像枚举和结构一样,类也是一种用户自己构造的数据类型像枚举和结构一样,类也是一种用户自己构造的数据类型并遵循并遵循C+的规定。的规定。p类也要先声明后使用;类也要先声明后使用;p不管声明的内容是否相同,声明同一个名字的两个类是不管声明的内容是否相同,声明同一个名字的两个类是错误的,类是具有惟一标识符的实体;错误的,类是具有惟一标识符的实体;p在类中声明的任何成员不能使用在类中声明的任何成员不能使用extern、auto和和register关键字进行修饰;关键字进行修饰;p类中声明的变量属于该类,在某些情况下,变量可以类中
2、声明的变量属于该类,在某些情况下,变量可以被该类的不同实例所共享。被该类的不同实例所共享。p类和其他数据类型不同的是,组成这种类型的不仅类和其他数据类型不同的是,组成这种类型的不仅可以有数据,而且可以有对数据进行操作的函数,可以有数据,而且可以有对数据进行操作的函数,它们分别叫做类的数据成员和类的成员函数,而且它们分别叫做类的数据成员和类的成员函数,而且不能在类声明中对数据成员使用表达式进行不能在类声明中对数据成员使用表达式进行初始化初始化。第2页,本讲稿共108页1.声明类声明类类是对一组性质相同对象的程序描述。在类是对一组性质相同对象的程序描述。在C+中声明类中声明类的一般形式为:的一般形
3、式为:class类名类名private:私有数据和函数私有数据和函数public:公有数据和函数公有数据和函数protected:保护数据和函数保护数据和函数;类声明以关键字类声明以关键字class开始,其后跟类名。类所声明的开始,其后跟类名。类所声明的内容用花括号括起来,右花括号后的分号作为类声明语句内容用花括号括起来,右花括号后的分号作为类声明语句的的结束标志结束标志。这一对花括号。这一对花括号“”之间的内容称为类体。之间的内容称为类体。第3页,本讲稿共108页类中定义的数据和函数称为这个类的成员(数据类中定义的数据和函数称为这个类的成员(数据成员和成员函数)。成员和成员函数)。类成员均具
4、有一个属性,叫做访问权限,通过它前面的类成员均具有一个属性,叫做访问权限,通过它前面的关键字来定义。关键字关键字来定义。关键字private、public和和protected以后的以后的成员的访问权限分别是私有、公有和保护的,把这些成员分成员的访问权限分别是私有、公有和保护的,把这些成员分别叫做私有成员、公有成员和保护成员。别叫做私有成员、公有成员和保护成员。访问权限用于控制对象的某个成员在程序中的可访问访问权限用于控制对象的某个成员在程序中的可访问性,如果没有使用关键字,则所有成员默认声明为性,如果没有使用关键字,则所有成员默认声明为private权限。这些关键字的使用顺序和次数也都是任权
5、限。这些关键字的使用顺序和次数也都是任意的。意的。第4页,本讲稿共108页【例【例4.1】描述点的描述点的Point类。类。classPoint/类名类名Pointprivate:/声明为私有访问权限声明为私有访问权限intx,y;/私有数据成员私有数据成员public:/声明为公有访问权限声明为公有访问权限voidSetxy(inta,intb);/无返回值的公有成员函数无返回值的公有成员函数voidMove(inta,intb);/无返回值的公有成员函数无返回值的公有成员函数voidDisplay();/无返回值的公有成员函数无返回值的公有成员函数intGetx();/返回值为返回值为in
6、t的公有成员函数的公有成员函数intGety();/返回值为返回值为int的公有成员函数的公有成员函数;/类声明以分号结束类声明以分号结束x和和y是私有成员是私有成员Setxy、Display、Move、Getx和和Gety是公有成员是公有成员因为只是声明函数,所以可只给出函数原型。【例因为只是声明函数,所以可只给出函数原型。【例4.2】是其等效的声】是其等效的声明方式。明方式。第5页,本讲稿共108页【例【例4.2】使用默认关键字及改变关键字顺序和次数的使用默认关键字及改变关键字顺序和次数的Point类。类。#includeusingnamespacestd;classPoint/类名类名P
7、ointintx;/默认私有数据成员默认私有数据成员public:/声明为公有访问权限声明为公有访问权限voidSetxy(int,int);/无返回值的公有成员函数的函数原型无返回值的公有成员函数的函数原型voidMove(int,int);/无返回值的公有成员函数的函数原型无返回值的公有成员函数的函数原型voidDisplay();/无返回值的公有成员函数的函数原型无返回值的公有成员函数的函数原型intGetx();/返回值为返回值为int的公有成员函数的函数原型的公有成员函数的函数原型intGety();/返回值为返回值为int的公有成员函数的函数原型的公有成员函数的函数原型privat
8、e:/声明为私有访问权限声明为私有访问权限inty;/私有数据成员私有数据成员;/类定义以分号结束类定义以分号结束由此可见,成员函数声明的规则与第由此可见,成员函数声明的规则与第3章所述的函数声明规则相同。章所述的函数声明规则相同。第6页,本讲稿共108页2.定义成员函数定义成员函数类中说明的成员函数用来对数据成员进行操作。类中说明的成员函数用来对数据成员进行操作。在类中只对这些成员函数进行了函数声明,还必须在在类中只对这些成员函数进行了函数声明,还必须在程序中实现这些成员函数。程序中实现这些成员函数。定义成员函数的一般形式为:定义成员函数的一般形式为:返回类型返回类型类名类名:成员函数名(参
9、数列表)成员函数名(参数列表)成员函数的函数体成员函数的函数体/内部实现内部实现其中其中“:”是是作用域运算符作用域运算符,“类名类名”是成员函数所是成员函数所属类的名字,属类的名字,“:”用于表明其后的成员函数是属于这个用于表明其后的成员函数是属于这个特定的类。特定的类。“类名类名:成员函数名成员函数名”的意思就是对属于的意思就是对属于“类类名名”的成员函数进行定义,而的成员函数进行定义,而“返回类型返回类型”则是这个成员则是这个成员函数返回值的类型。函数返回值的类型。第7页,本讲稿共108页定义成员函数的函数体。例如定义成员函数的函数体。例如Setxy定义如下:定义如下:voidPoint
10、:Setxy(inta,intb)x=a;y=b;定义定义Point的函数成员的函数成员Setxy(inta,intb),该成员带有两个整型,该成员带有两个整型参数,函数没有返回值参数,函数没有返回值(void)。voidPoint:Move(inta,intb)x=x+a;y=y+b;voidPoint:Display()coutx,yendl;intPoint:Getx()returnx;intPoint:Gety()returny;第8页,本讲稿共108页可以使用关键字可以使用关键字inline将成员函数定义为内联函数,例如:将成员函数定义为内联函数,例如:inlineintPoint:
11、Getx()returnx;如果在声明类的同时,在类体内给出成员函数的定义,如果在声明类的同时,在类体内给出成员函数的定义,则则默认为默认为内联函数。例如在类中将声明内联函数。例如在类中将声明Getx的语句的语句“intGetx();”改为改为“intGetx()returnx;”,则,则Getx为内联函数。为内联函数。一般直接在类体内给出简单成员函数的定义。一般直接在类体内给出简单成员函数的定义。有些成员函数的实现方式不止一种,例如有些成员函数的实现方式不止一种,例如voidPoint:Display()coutGetx(),Gety()endl;是调用成员函数是调用成员函数Getx()和和
12、Gety()实现的,它们使用了实现的,它们使用了cout流,流,应在定义之前包含如下语句:应在定义之前包含如下语句:#includeusingnamespacestd;第9页,本讲稿共108页3.数据成员的赋值数据成员的赋值不能在类体内给数据成员赋值,即下面的方法是错误的:不能在类体内给数据成员赋值,即下面的方法是错误的:ClassPointintx=25,y=56;当然,在类体外面就更不允许了。当然,在类体外面就更不允许了。数据成员的具体值是用来描述对象的属性的。只有产生了一个具体数据成员的具体值是用来描述对象的属性的。只有产生了一个具体的对象,这些数据值才有意义,所以又称对象的初值或对象初
13、始化。的对象,这些数据值才有意义,所以又称对象的初值或对象初始化。假设已经有了一个对象假设已经有了一个对象A,则可使用,则可使用“.”运算符调用成员函数运算符调用成员函数Setxy赋初值。例如:赋初值。例如:A.Setxy(25,56);将对象将对象A的数据成员的数据成员x和和y分别赋给分别赋给25和和56,即,即A.x=25,A.y=56。真正的初始化是使用与真正的初始化是使用与Point同名的构造函数同名的构造函数Point(int,int)实现的。实现的。产生产生Point对象的语句:对象的语句:PointA(25,56);第10页,本讲稿共108页4.1.2使用类的对象及指针使用类的对
14、象及指针Point类是用户定义的一种类型,使用类是用户定义的一种类型,使用Point在程序中声明变在程序中声明变量,具有量,具有Point类的类型的变量被称为类的类型的变量被称为Point的的对象对象。只有产生。只有产生类的对象,才能使用这些数据和成员函数。类的对象,才能使用这些数据和成员函数。类类Point不仅可以声明对象,还可以声明对象的引用和不仅可以声明对象,还可以声明对象的引用和对象的指针,语法与基本数据类型一样。对象的指针,语法与基本数据类型一样。PointA,B;/定义定义Point类型的对象类型的对象A和和BPoint*p=&A;/定义指向对象定义指向对象A的的Point类型的指
15、针类型的指针Point&R=B;/定义定义R为为Point类型对象类型对象B的引用的引用第11页,本讲稿共108页对象和引用都使用运算符对象和引用都使用运算符“.”访问对象的成员,访问对象的成员,指针则使用指针则使用“-”运算符。例如:运算符。例如:A.Setxy(25,88);/为对象为对象A设置初值设置初值p-Display();/显示指针显示指针p所指对象所指对象A的数据成员的数据成员/A.x和和A.y之值之值R.Display();/显示对象显示对象B的数据成员的数据成员B.x和和B.y之值之值【例【例4.3】根据上面对】根据上面对Point类的定义,演示使用类的定义,演示使用Poin
16、t类的类的对象。对象。voidprint(Pointa)/使用使用Point的对象的对象a作为函数参数作为函数参数a.Display();/显示对象显示对象a的数据成员的值的数据成员的值voidmain()第12页,本讲稿共108页PointA,B;/声明对象声明对象A.Setxy(25,55);/为对象为对象A赋初值赋初值B=A;/B的数据成员取的数据成员取A的数据成员之值的数据成员之值A.Display();/显示显示A的数据成员的数据成员A.Move(-10,20);/移动移动Aprint(A);/等价于等价于A.Display();print(B);/等价于等价于B.Display()
17、coutA.Getx()endl;/只能使用只能使用A.Getx(),/不能使用不能使用A.x本例中的本例中的print函数使用函数使用Point的对象作为参数。的对象作为参数。C+推推荐使用下面的引用的形式:荐使用下面的引用的形式:voidprint(Point&a)/使用对象的引用做为函数参数使用对象的引用做为函数参数a.Display();/显示引用对象显示引用对象a的数据成员之值的数据成员之值第13页,本讲稿共108页对象对象A移动之后,对象移动之后,对象B仍为原来的值,所以输出如下:仍为原来的值,所以输出如下:25,55/原来的原来的A和和B15,75/新的新的A25,55/原来的原
18、来的B15/A.Getx()返回对象返回对象A的数据成员的数据成员x的之值的之值如果在如果在print函数或主函数里使用如下语句,则产生错误:函数或主函数里使用如下语句,则产生错误:coutA.x,A.y”运算符访问对象的成员,运算符访问对象的成员,即:即:对象指针名对象指针名-对象成员名对象成员名第18页,本讲稿共108页【例【例4.4】演示使用内联函数定义】演示使用内联函数定义Point类及使用类及使用Point类指针和引用的完整例子。类指针和引用的完整例子。#include/包含头文件包含头文件usingnamespacestd;/声明命名空间声明命名空间classPoint/使用内联函
19、数定义类使用内联函数定义类Pointprivate:/声明为私有访问权限声明为私有访问权限intx,y;/私有数据成员私有数据成员public:/声明为公有访问权限声明为公有访问权限voidSetxy(inta,intb)/无返回值的内联公有成员函数无返回值的内联公有成员函数x=a;y=b;voidMove(inta,intb)/无返回值的内联公有成员函数无返回值的内联公有成员函数x=x+a;y=y+b;voidDisplay()/无返回值的内联公有成员函数无返回值的内联公有成员函数coutx,yDisplay();voidprint(Point&a)/类引用作为类引用作为print函数的参数
20、定义重载函数函数的参数定义重载函数a.Display();第19页,本讲稿共108页voidmain()/主函数主函数PointA,B,*p;/声明对象和指针声明对象和指针Point&RA=A;/声明对象声明对象RA引用对象引用对象AA.Setxy(25,55);/使用成员函数为对象使用成员函数为对象A赋值赋值B=A;/使用赋值运算符为对象使用赋值运算符为对象B赋值赋值p=&B;/类类Point的指针指向对象的指针指向对象Bp-Setxy(112,115);/使用指针调用函数使用指针调用函数Setxy/重新设置重新设置B的值的值print(p);/传递指针显示对象传递指针显示对象B的属性的属性
21、p-Display();/再次显示对象再次显示对象B的属性的属性RA.Move(-80,23);/引用对象引用对象RA调用调用Move函数函数print(A);/验证验证RA和和A同步变化同步变化print(&A);/直接传递直接传递A的地址作为指针参数的地址作为指针参数第20页,本讲稿共108页程序运行结果如下:程序运行结果如下:112,115112,115-55,78-55,78由此可见,使用对象和对象指针的效果一样。由此可见,使用对象和对象指针的效果一样。第21页,本讲稿共108页4.1.4数据封装数据封装面向对象的程序设计,是通过为数据和代码建立分块面向对象的程序设计,是通过为数据和代
22、码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用做样板,在需要时再建立其副本。方法,这些模块可以被用做样板,在需要时再建立其副本。根据这个定义,对象是计算机内存中的一块区域,通过将根据这个定义,对象是计算机内存中的一块区域,通过将内存分块,每个模块内存分块,每个模块(即对象即对象)在功能上保持相对独立。另在功能上保持相对独立。另外,定义也表明如下问题:外,定义也表明如下问题:这些这些内存块中不但存储数据,而且也存储代码,这对内存块中不但存储数据,而且也存储代码,这对保证对象是受保护的这一点很重要。对象保护它自己
23、不保证对象是受保护的这一点很重要。对象保护它自己不受未知的外部事件的影响,从而使自己的数据和功能不受未知的外部事件的影响,从而使自己的数据和功能不会因此遭到破坏。会因此遭到破坏。第22页,本讲稿共108页这些内存块这些内存块的结构可被用做样板产生对象的更多副本。的结构可被用做样板产生对象的更多副本。例如,一旦定义了一个窗口对象,只要内存允许,就可以例如,一旦定义了一个窗口对象,只要内存允许,就可以建立许多这样的对象。建立许多这样的对象。在面向对象的程序中,对象的行为只有向对象发送消在面向对象的程序中,对象的行为只有向对象发送消息才能引用,例如通过息才能引用,例如通过Display发出显示消息,
24、所以说面向发出显示消息,所以说面向对象是消息处理机制。面向对象就是将世界看成是由一组对象是消息处理机制。面向对象就是将世界看成是由一组彼此相关并能相互通信的实体即对象组成的。程序中的对彼此相关并能相互通信的实体即对象组成的。程序中的对象映射现实世界中的对象。象映射现实世界中的对象。第23页,本讲稿共108页C+对其对象的数据成员和成员函数的访问是通过访对其对象的数据成员和成员函数的访问是通过访问控制权限来限制的。问控制权限来限制的。private是限制类之外的函数的访问是限制类之外的函数的访问权。只要将数据成员或成员函数使用权。只要将数据成员或成员函数使用private限定,就设定限定,就设定
25、了一道防线。它还必须留下与外面打交道的接口,这通过了一道防线。它还必须留下与外面打交道的接口,这通过具有具有public权限的成员函数实现。权限的成员函数实现。在在C+中,数据封装是通过类来实现的。在类中指定了各成中,数据封装是通过类来实现的。在类中指定了各成员的访问权限。一般情况下:员的访问权限。一般情况下:将数据成员说明为私有的,以便隐藏数据;将数据成员说明为私有的,以便隐藏数据;将部分成员函数说明为公有的,用于提供外界和这个类将部分成员函数说明为公有的,用于提供外界和这个类的对象相互作用的接口(界面),从而使得其他函数的对象相互作用的接口(界面),从而使得其他函数(例如(例如main函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象C 第四章优秀课件 面向 对象 第四 优秀 课件
限制150内