资源描述:
《(最新)第04章_类与对象》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本章主要内容面向对象的思想OOP的基本特点类概念和声明对象构造函数析构函数内联成员函数拷贝构造函数类的组合类的声明(即类的定义)classrectangle//声明一个“矩形”类{private:intx,y,weight,high;//声明私有变量public:rectangle(intxx,intyy,intw,inth)//声明构造函数{x=xx;y=yy;weight=w;high=h;}inlineintarea();}inlineintrectangle::area(){returnweight*high;}定义对象定义一个位于坐标(12,34),重量56,高度78的矩形对象
2、r1:rectangler1(12,34,56,78);计算矩形r1的面积:r1.area();面向对象程序设计:被结构化的结构化程序设计;对象:一组数据及相关代码的结合体;数据:描述对象的属性;代码:对数据进行处理的操作;封装:隐藏大部分细节(数据、代码);接口:对外开放一部分属性和操作;类:同类型对象的抽象描述,面向对象方法的核心;聚合:由简单对象组合而成的复杂对象;消息:对类的成员函数的调用,是对象之间彼此联系、共同协作的媒介。4.1面向对象程序设计思想4.1.1面向对象程序设计的特点1.抽象性:抽取本质特性(共性),加以简单描述例如用C++语言将圆形(circle)抽象如下:数据
3、抽象:对象属性和状态的描述doublex,y,r;行为抽象:数据所需要的操作setx();sety();setr();draw();抽象是面向对象方法的核心。2.封装性:内部细节对外隐藏,通过接口进行控制使程序中各部分之间的相互影响达到最小;提高程序的安全性;简化代码的编写工作;对象中的数据(即属性)、操作代码(即行为)称为对象的成员。私有成员:对象中被隐藏的部分;公有成员:对象与外界的接口。封装的两个目标:1.数据和行为的包装;2.信息隐藏。3.继承性:复用共性,简化描述一般类:包含共性;特殊类:在一般类的基础上,增添每个具体类的个性;继承:特殊类的对象拥有一般类的全部属性和操作;多继
4、承:一个类可以继承多个一般类的特性。例如:ClassA//一般类A作为基类{…}ClassB//一般类B作为基类{…}ClassC:publicA,publicB//派生类C是特殊类{…}4.多态性:一个接口,多种方式多态性也是面向对象程序设计的重要特性之一。多态性:在基类中定义的属性和操作被派生类继承之后,可以具有不同的数据类型或表现出不同的行为,例如函数重载;静态多态性:在编译过程中确定同名操作的具体对象;动态多态性:在程序运行过程中才确定操作所针对的具体对象;联编(binding绑定):把一条消息和一个对象的方法相结合的过程,即调用成员函数;消息:(对类的成员函数的)调用;方法:成
5、员函数;静态联编:在编译阶段完成联编;动态联编:在程序运行阶段完成联编。4.2类和对象4.2.1类的声明类的声明即类的定义,声明一个类的语法与结构的声明类似:class<类名>//class是声明类的关键字{private:<私有成员函数和数据成员的说明>public:<公有成员函数和数据成员的说明>};<各个成员函数的实现>类的成员函数用于对数据成员进行处理,又称为“方法”,程序中通过类的成员函数来访问其内部的数据成员。一般类中成员函数的原型声明写在类定义体内,用以说明该成员函数的形式参数和返回值类型,而成员函数的定义体一般写在类定义之外。通常采用下面的形式定义成员函数:<类型标识符>
6、<类名>::<成员函数名>(<形参表>){<函数体>}例如:classrectangle{private:intx,y,weight,high;public:rectangle(intxx,intyy,intw,inth){x=xx;y=yy;weight=w;high=h;}inlineintarea();};inlineintrectangle::area(){returnweight*high;}类和对象的关系相当于普通数据类型与其变量的关系。声明一个类:定义了一种新的数据类型;对象说明:创建这种数据类型的物理实体。由同一个类创建的各个对象具有完全相同的数据结构,但它们的数据值在使
7、用过程中可能各不相同。一旦创建了一个类的对象,程序就可以用圆点运算符“.”来引用类的公有成员,其一般形式为<对象名>.<公有数据成员名>或<对象名>.<公有成员函数名(实参表)>4.2.2对象例如,用前面定义的rectangle类声明一个rectangle的对象r1,通过对象r1完成对成员函数area()的调用:rectangler1(10,10,20,20);r1.area();注意:只有用public定义的公有成员才能使用圆点操