




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 类与对象本章主要内容l面向对象的思想lOOP的基本特点l类概念和声明l对象l构造函数l析构函数l内联成员函数l拷贝构造函数l类的组合第五章 类与对象类的声明(即类的定义)class rectangle /声明一个 “矩形 ”类private:int x, y, weight, high; /声明私有变量public:rectangle(int xx,int yy,int w,int h) /声明构造函数 x = xx; y = yy; weight = w; high = h; inline int area( ); inline int rectangle:area( )return weight*high;第五章 类与对象定义对象定义一个位于坐标( 12, 34),重量56,高度 78的矩形对象 r1: rectangle r1( 12, 34, 56, 78 );计算矩形 r1的面积: r1.area( );第五章 类与对象面向 对象 程序设计: 被结构化的结构化程序设计 ;对象: 一组 数据 及相关 代码 的结合体 ;数据: 描述对象的 属性 ;代码: 对数据进行处理的 操作 ;封装: 隐藏大部分 细节(数据、代码) ;接口: 对外开放一部分 属性 和 操作 ;类: 同类型对象的 抽象描述 ,面向对象方法的 核心 ;聚合: 由简单对象组合而成的 复杂对象 ;消息: 对类的 成员函数的调用 ,是对象之间彼此联系 、 共同协作 的媒介 。1 面向对象程序设计思想第五章 类与对象1.1 面向对象程序设计的特点1抽象性: 抽取本质特性 (共性) ,加以简单 描述例如用 C+语言将圆形 (circle)抽象如下:数据抽象: 对象 属性 和 状态 的描述double x, y, r;行为抽象: 数据所需要的 操作setx( ); sety( ); setr( ); draw( );抽象是面向对象方法的核心 。第五章 类与对象2封装性: 内部细节对外隐藏,通过接口进行控制使程序中各部分之间的相互影响达到最小;提高程序的安全性;简化代码的编写工作;对象中的 数据 (即 属性 )、 操作代码 (即行为 )称为对象的 成员 。私有成员:对象中被隐藏的部分;公有成员:对象与外界的接口。封装的 两个目标 : 1. 数据和行为的包装;2. 信息隐藏。第五章 类与对象3继承性: 复用共性,简化描述一般类: 包含 共性 ;特殊类: 在一般类的基础上,增添每个具体类的个性 ;继承: 特殊类的对象拥有 一般类的全部属性和操作 ;多继承: 一个类可以继承 多个一般类 的特性 。例如:Class A /一般类 A作为 基类 Class B /一般类 B作为 基类 Class C: public A, public B /派生类 C是特殊类 第五章 类与对象多态性: 一个接口,多种方式多态性也是面向对象程序设计的重要特性 之一。多态性: 在 基类 中定义的属性和操作被 派生类 继承之后,可以具有不同的数据类型或表现出不同的行为,例如 函数重载 ;静态多态性: 在 编译过程 中确定同名操作的具体对象 ;动态多态性: 在程序 运行过程 中才确定操作所针对的 具体对象 ;联编 (binding 绑定 ): 把一条 消息 和一个对象的 方法 相结合 的 过程 ,即 调用成员函数 ;消息: (对类的成员函数的)调用 ;方法: 成员函数 ;静态联编: 在 编译阶段 完成联编 ;动态联编: 在程序 运行阶段 完成联编 。第五章 类与对象2 类和对象2.1 类的声明类的声明即类的定义 ,声明一个类的语法与结构的声明类似:class /class是声明类的关键字private:public:;第五章 类与对象类的 成员函数 用于对数据成员进行处理,又称为 “方法 ”,程序中通过类的成员函数来访问其内部的数据成员。一般类中成员函数的原型声明写在类定义体内,用以说明该成员函数的形式参数和返回值类型,而成员函数的定义体一般写在类定义之外。通常采用下面的形式定义成员函数::()第五章 类与对象例如:class rectangle private:int x, y, weight, high;public:rectangle(int xx,int yy,int w,int h) x = xx; y = yy; weight = w; high = h; inline int area( ); ;inline int rectangle:area( )return weight*high;第五章 类与对象类和对象的关系相当于普通数据类型与其变量的关系。声明一个 类 :定义了一种新的 数据类型 ;对象 说明:创建这种 数据类型的物理实体。由同一个类创建的各个对象具有完全相同的数据结构,但它们的数据值在使用过程中可能各不相同。一旦创建了一个类的对象,程序就可以用圆点运算符 “.”来引用类的公有成员,其一般形式为 或 2.2 对象第五章 类与对象例如,用前面定义的 rectangle类声明一个rectangle的对象 r1, 通过对象 r1完成对成员函数area( )的调用:rectangle r1(10, 10, 20, 20);r1.area( );注意: 只有用 public定义的公有成员才能使用圆点操作符访问,对象中的私有成员是类中隐藏的数据,不允许在类外的程序中被直接访问,只能通过该类的公有成员函数来访问它们。第五章 类与对象构造函数 : 在类中声明的一种 特殊的成员函数 ;作用: 将 对象初始化 为一个特定的状态 。构造函数的名字 与 它所属的 类名相同 ,被声明为 公有函数 , 没有返回值 ,在创建对象时被 自动调用。构造函数可以 访问类的所有数据成员 ,可以是 内联函数 ,可以带有 参数表 ,可以带 默认的形参值 。构造函数也可以 重载 ,以提供初始化类对象的不同方法。 2.3 构造函数和析构函数第五章 类与对象例如,前面定义的 rectangle类 的构造函数为rectangle(int xx,int yy,int w,int h) x = xx; y = yy; weight = w; high = h; 每个类都必须有构造函数,若类定义时没有定义任何构造函数,编译器会 自动生成 一个 不带参数 的缺省构造函数,其形式如下::( )/第五章 类与对象定义拷贝构造函数的一般形式为:class class_nameprivate:public:class_name(形式参数表 ) /构造函数 函数体 class_name(class_name public:point(int xx = 0, int yy = 0) /定义构造函数x = xx ;y = yy ;cout using namespace std;const float PI = 3.14159;const float FencePrice = 35;const float ConcretePrice = 20;/声明类 Circle 及其数据和方法class Circleprivate:float radius;public:Circle(float r); /构造函数float Circumference() const; /圆周长float Area() const; /圆面积;43/ 类的实现 :/ 构造函数初始化数据成员 radiusCircle:Circle(float r)radius=r/ 计算圆的周长float Circle:Circumference() constreturn 2 * PI * radius;/ 计算圆的面积 float Circle:Area() constreturn PI * radius * radius;44void main()float radius;float FenceCost, ConcreteCost; coutradius;/ 声明 Circle 对象 :Circle Pool(radius);Circle PoolRim(radius + 3);/ 计算栅栏造价并输出 :FenceCost = PoolRim.Circumference( ) * FencePrice;cout :(形参表 ): 对象成员 1(形参表 ),对象成员 2(形参表 ), 类的初始化程序体其中,构造函数冒号后的部分 “对象成员 1(形参表 ),对象成员 2(形参表 ), ” 称作 成员初始化列表 ,用于完成对组合类中所包含的对象成员的初始化,该表列出了初始化各对象成员所使用的构造函数。注意: 各成员对象的 构造函数的调用次序与 这些成员对象在类中的 声明次序一致 ,而与 成员初始化列表 中给出的次序无关。组合类构造函数定义的一般形式:第五章 类与对象/ex4_2.cpp : 演示组合类中构造函数调用次序#include #include class point /声明 point类private:int x, y ;public:point( int i=0, int j=0 ) /定义构造函数x=i ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论