第四讲 类与对象 总结.docx
- 文档编号:24583474
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:8
- 大小:123.08KB
第四讲 类与对象 总结.docx
《第四讲 类与对象 总结.docx》由会员分享,可在线阅读,更多相关《第四讲 类与对象 总结.docx(8页珍藏版)》请在冰豆网上搜索。
第四讲类与对象总结
第四讲类与对象
在C++中对象的类型称为类(class)。
类代表了某一批对象的共性和特征。
类是对象的抽象,而对象是类的具体实例(instance)。
面向过程的思想:
方法:
结构化程序设计方法。
形式:
主模块+若干个子模块(main()+子函数)。
特点:
自顶向下,逐步求精——功能分解。
缺点:
效率低,程序的可重用性差。
面向对象的思想:
目的:
实现软件设计的产业化。
观点:
自然界是由实体(对象)所组成。
程序设计方法:
使用面向对象的观点来描述模仿并处理现实问题。
要求:
高度概括、分类、和抽象。
抽象:
对类似的对象进行抽象,找出其共同属性,构成一种类型。
抽象:
抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。
数据抽象:
描述某类对象的属性或状态(对象相互区别的物理量)。
代码抽象:
描述某类对象的共有的行为特征或具有的功能。
抽象的实现:
通过类的声明。
抽象实例:
访问权限
接口
classClock{private:
inthour,minute,second;数据抽象public:
voidsetTime(intnewH,intnewM,intnewS);代码抽象
voidshowTime();代码抽象};抽象实例——人
数据抽象:
stringname,stringsex,intage,intid代码抽象:
生物属性角度:
setname(),eat(),walk(),…社会属性角度:
work(),study(),…封装:
将抽象出的数据成员、代码成员相结合,将它们视为一个整体。
实现封装:
类声明中的{}通过封装使一部分成员充当类与外部的接口,而将其他成员隐藏起来,这样达到了成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序编写工作。
继承:
先定义一般概念,然后再生成特殊概念,并且特殊概念继承一般概念,使得一般概念中的属性和行为可以被特殊概念共享,摆脱重复分析、重复开发的困境。
如:
人(一般概念,包含了人的一般属性和行为),大学生(特殊概念,还有:
专业、年级、升级、毕业等属性和行为)、医生(特殊概念,还有:
科室、专长、做手术等属性和行为)继承是C++中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。
实现:
声明派生类——见第7章多态性;多态:
同一名称,不同的功能实现方式。
如:
画图形:
画直线、画圆、画椭圆、画矩形目的:
达到行为标识统一,减少程序中标识符的个数。
实现:
强制数据类型转换、重载函数、虚函数c++中的类:
现实概念:
类是具有相同属性和行为的一组对象的集合。
程序中:
对逻辑上相关的函数与数据的封装,是对问题的抽象描述,其内部包括属性和行为两个主要部分。
利用类可以实现数据的封装、隐藏、继承与派生。
利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。
类的声明形式:
类是一种用户自定义类型,声明形式:
class类名称{public:
公有成员(外部接口)private:
私有成员protected:
保护型成员}说明:
1、成员数据:
与一般的变量声明相同,但需要将它放在类的声明体中。
2、成员函数:
在类中说明原型,可以在类外给出函数体实现,并在函数名前使用类名加以限定。
也可以直接在类中给出函数体,形成内联成员函数。
类内联成员函数
为了提高运行时的效率,对于较简单的函数可以声明为内联形式。
内联函数体中不要有复杂结构(如循环语句和switch语句)。
在类中声明内联成员函数的方式:
将函数体放在类的声明中。
使用inline关键字允许声明重载函数和带默认形参值的函数.
类成员函数的实现:
classclock{public:
voidsetTime(intnewH,intnewM,intnewS);
voidshowTime();private:
inthour,hinute,second;};
类成员函数的实现
voidClock:
:
setTime(intnewH,intnewM,intnewS){hour=newH;minute=newM;second=newS;}voidClock:
:
showTime(){cout< "< "< {clockmyclock; Myclock.showtime(); Myclock.settime(8,30.30); Myclock.showtime(); Return0; } 3、类和对象——对象 类的对象是该类的某一特定实体,即类类型的变量。 声明形式: 类名对象名;例: ClockmyClock;Pointpoint1;例题: 定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形的面积。 #include voidsetLength(floatnewl){len=newl;}voidsetWidth(floatneww){width=neww;}doublegetArea();private: floatlen,width;};doublerectangle: : getArea(){returnlen*width;}intmain(){rectangler;r.setLength(3);r.setWidth(4);cout<<"area="< 在定义类时,只是定义了一种导出的数据类型,并不为类分配存储空间,所以,在定义类中的数据成员时,不能对其初始化。 如: classTest{intx=5,y=6;//是不允许的externfloatx;//是不允许的}对象的使用: 一个对象的成员就是该对象的类所定义的成员,有成员数据和成员函数,引用时同结构体变量类似,用“.”运算符。 例: classA{floatx,y;public: floatm,n;voidSetxy(floata,floatb){x=a;y=b;}voidPrint(void){cout< 25成员函数的重载: 成员函数: 在类中说明原型,可以在类外给出函数体实现,并在函数名前使用类名加以限定。 重载时,函数的形参必须在类型或数目上不同。 classTest{intx,y;intm,n;public: voidSetxy(inta,intb){x=a;y=b;}voidSetxy(inta,intb,intc,intd){x=a;y=b;m=c;n=d;}voidPrintxy(intx){cout<<“m="< x=3y=5p1.Printxy();x=10y=20p2.Printxy();p2.Printxy (2);//参数、类型不同m=30n=40}构造函数和析构函数 构造函数: 是对象的初始化程序作用: 在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。 表现: 是类的一个成员函数,具有一般成员函数的特征,但是: 函数名与类名相同,没有返回值,为共有函数。 在对象创建时由系统自动调用。 构造函数举例: classA{floatx,y;public: A(floata,floatb){x=a;y=b;}//构造函数,初始化对象floatSum(void){returnx+y;}voidSet(floata,floatb){x=a;y=b;}Print(void){cout<<"x="< 构造函数举例: classClock{public: Clock(intnewH,intnewM,intnewS);//构造函数Clock(){}//构造函数voidsetTime(intnewH,intnewM,intnewS);voidshowTime();private: inthour,minute,second;};说明: 1、如果类中没有写构造函数,则编译器自动生成一个隐含的默认构造函数(没有形参的构造函数称为默认构造函数)。 Clock(){}2、如果类中已经定义了构造函数,则编译器不再自动生成。 3、构造函数可以重载。 4,在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。 构造函数的实现: Clock: : Clock(intnewH,intnewM,intnewS){hour=newH;minute=newM;second=newS;}建立对象时构造函数的作用: intmain(){Clockc(0,0,0);//隐含调用构造函数,将初始值作为实参。 c.showTime();return0;}复制构造函数用一个同类的对象去初始化一个新对象,实现兑现的复制。 复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。 class类名{public: 类名(形参);//构造函数类名(类名&对象名);//复制构造函数...};类名: : 类(类名&对象名)//复制构造函数的实现{函数体}classPoint{public: Point(intxx=0,intyy=0){x=xx;y=yy;}Point(Point&p);intgetX(){returnx;}intgetY(){returny;}private: intx,y;};复制构造函数举例: classPoint{public: Point(intxx=0,intyy=0){x=xx;y=yy;}Point(Point&p);intgetX(){returnx;}intgetY(){returny;}private: intx,y;};Point: : Point(Point&p){x=p.x;y=p.y;cout<<"Callingthecopyconstructor"< 1、当用类的一个对象去初始化该类的另一个对象时系统自动调用复制构造函数实现拷贝赋值。 2、若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用复制构造函数。 3、当函数的返回值是类对象时,系统自动调用复制构造函数。 析构函数完成对象被删除前的一些清理工作。 一个类中,只能定义一个析构函数,析构函数不允许重载。 析构函数不能带有任何参数,不能有返回值,不指定函数类型。 在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。 如果程序中未声明析构函数,编译器将自动产生一个隐含的析构函数。 函数形式: ~类名(){}#include Point(intxx,intyy);~Point();//...其他函数原型private: intx,y;};Point: : Point(intxx,intyy){x=xx;y=yy;}Point: : ~Point(){}//...其他函数的实现略 classA{floatx,y;public: A(floata,floatb){x=a;y=b;cout<<"调用非缺省的构造函数\n";}A(){x=0;y=0;cout<<"调用缺省的构造函数\n";}~A(){cout<<"调用析构函数\n";}voidPrint(void){cout< 类的应用举例 一圆形游泳池如图所示,现在需在其周围建一圆形过道,并在其四周围上栅栏。 栅栏价格为35元/米,过道造价为20元/平方米。 过道宽度为3米,游泳池半径由键盘输入。 要求编程计算并输出过道和栅栏的造价。 #include Circle(floatr);//构造函数floatcircumference();//计算圆的周长floatarea();//计算圆的面积private: floatradius;//圆半径};Circle: : Circle(floatr){radius=r;}floatCircle: : circumference()//计算圆的周长{return2*PI*radius;}floatCircle: : area()//计算圆的面积{returnPI*radius*radius;}intmain(){floatradius;cout<<"Entertheradiusofthepool: ";cin>>radius;Circlepool(radius);//游泳池边界CirclepoolRim(radius+3);//栅栏//计算栅栏造价并输出floatfenceCost=poolRim.circumference()*FENCE_PRICE;cout<<"FencingCostis$"< 在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合,由比较容易理解和实现的部件对象装配而成。 类中的成员数据是另一个类的对象。 可以在已有抽象的基础上实现更复杂的抽象。 类的组合举例: classPoint{private: floatx,y;//点的坐标public: Point(floath,floatv);floatgetX();floatgetY();voiddraw();};//...函数的实现略classLine{private: Pointp1,p2;doubleLen;public: Line(Pointa,Pointb);voiddraw(void);doublegetLen();};类组合的构造函数设计当创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象将首先被自动创建,因此,在创建对象时既要对本类的基本类型数据成员初始化,又要对内嵌对象成员初始化。 组合类构造函数定义的一般形式: 类名: : 类名(对象成员所需的形参,本类成员形参): 对象1(参数),对象2(参数){基本数据类型成员初始化}//部件类classPart{public: Part();Part(inti);~Part();voidPrint();private: intval;};classWhole{public: Whole();Whole(inti,intj,intk);~Whole();voidPrint();private: Partone;Parttwo;intdate;};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四讲 类与对象 总结 第四 对象