类与对象(c++).ppt_第1页
类与对象(c++).ppt_第2页
类与对象(c++).ppt_第3页
类与对象(c++).ppt_第4页
类与对象(c++).ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章类与对象 7 1类 对象及数据封装7 2构造函数 析构函数 成员函数 静态成员与友元 教学目标 1掌握类及对象的概念 类与对象的关系 类与对象的差异2掌握构造函数 析构函数的作用及定义3了解静态成员 友元等概念 教学重点 1 类和对象概念和定义 2 构造函数和析构函数解析 教学难点 构造函数 析构函数 第7章类与对象 7 1类的定义 7 1 1类的定义7 1 2类成员的访问控制7 1 3类的成员函数7 1 4对象 7 1 1类的定义 类的引入 类是一种由用户定义的复杂数据类型 它是将不同类型的数据及相关的操作封装在一起的集合体 描述客观事物时 必须用不同的数据类型来描述事物各个不同的方面 如一种商品 商品名称 用字符串描述 该商品数量 用整型数描述 该商品单价 用浮点数描述 该商品总价 用浮点数描述 这里用了属于三种不同数据类型的四个数据成员来描述一种商品 7 1 1类的定义 类的定义的一般格式 说明部分class public protected private 实现部分 7 1 1类的定义 类的表述 classGoods private charname 21 intamount floatprice floattValue public setPrice intp 最后的分号不可少 这是一条说明语句关键字class是数据类型说明符 指出下面说明的是类 标识符Goods是商品这个类的类型名 花括号中是构成类体的系列成员 关键字public是一种访问限定符 7 1 1类的定义 类定义语法格式 class类名 private 成员表1 public 成员表2 protected 成员表3 注意 所有说明都以分号结束其中 class类名 称为类头 花括号中的部分称为类体 类体中定义了类成员表 包含数据和函数 7 1 1类的定义 成员函数 classGoods private charname 21 intamount floatprice floattValue public voidregisterGoods char int float 输入数据voidcountTotal void 计算商品总价值voidgetName char 读取商品名intgetAmount void 读取商品数量floatgetPrice void 读取商品单价floatgetTvalue void 读取商品总价值 7 1 1类的定义 封装 类把数据 事物的属性 和函数 事物的行为 操作 封装为一个整体 接口 通常数据成员被说明成私有的 函数成员被说明成公有的 从外部对数据成员进行操作 只能通过公有函数来完成 从而使数据受到了良好的保护 不易受副作用的影响 公有函数集定义了类的接口 成员函数可以直接访问类定义中的任一成员 可以处理数据成员 也可调用成员函数 注意 类是一种数据类型 定义时系统不为类分配存储空间 所以不能对类的数据成员初始化 类中的任何数据成员也不能使用关键字extern auto或register限定其存储类型 7 1 2类成员的访问控制 访问限定符 public 公共的 说明的成员能从外部进行访问 private 私有的 和protected 保护的 说明的成员不能从外部进行访问 每种说明符可在类体中使用多次 访问限定符的作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束 如果在类体起始点无访问说明符 系统默认定义为私有 private 访问限定符private protected体现了类具有封装性 7 1 3类的成员函数 成员函数定义 成员涵数用来描述事物的行为 成员涵数的说明必须在类体中进行 但定义既可以在类体中进行 也可以在类体外进行 1 通常在类定义中 成员函数仅作声明 函数定义通常在类的说明之后进行 其格式如下 返回值类型类名 函数名 参数表 函数体其中运算符 称为作用域运算符 它指出该函数是属于哪一个类的成员函数 2 另一种方式是对成员涵数进行说明后 紧接着进行成员涵数的定义 classGoods private charname 21 intamount floatprice floattValue public floatgetPrice floatgetTvalue voidsetPrice intp price p floatGoods getPrice return Price floatGoods getTvalue return tValue 7 1 3类的成员函数 7 1 4对象的定义 定义对象 对象是类的实例 instance 定义一种数据类型只是告诉编译系统该数据类型的构造 并没有分配内存 类只是一个样板 以此样板可以在内存中开辟出同样结构的实例 对象 一个对象必须属于一个已知的类 7 1 4对象的定义 定义对象的格式如下 其中 类名 为对象所属的类的名称 对象名 合法的C 标识符 可以一次定义多个对象 参数表 为初始化对象时所需要的参数 例如 Goodscar 这个定义创建了Goods类的一个对象car 同时为它分配了属于它自己的存储空间 用来存放数据和对这些数据实施操作的成员函数 代码 对象存储 图7 1各对象完全独立地安排内存的方案 图7 1是系统为每一个对象分配了全套的内存 数据区安放数据成员 代码区安放成员函数 注意 区别同一个类的各个不同的对象的属性是由数据成员决定的 不同对象的数据成员的内容是不一样的 而行为 操作 是用函数来描述的 这些操作的代码对所有对象都是一样的 7 1 4对象的定义 图7 2各对象的代码区共用的方案 图7 2仅为每个对象分配一个数据区 代码区 存放成员函数的区域 为各对象类共用 图7 1对应的是在类说明中定义函数 而图7 2对应的是在类说明外部定义函数 7 1 4对象的定义 7 1 4对象的定义 对象的成员就是用来创建该对象的类所定义的成员 包括数据成员和成员涵数创建对象之后 就可以使用 和 来访问对象的数据成员和成员涵数 一般格式如下 数据成员名 成员涵数名 参数表 或者 成员涵数名 参数表 对象使用规则 只要在对象名后加点号 点操作符 再加数据成员或成员函数名就可以了 但是这些成员必须是公有的成员 只有公有成员才能在对象的外面对它进行访问 例7 1 中对象car的4个数据成员全是私有的 如写 car name car amount car price car tValue 是错误的 必须用对象car所带的公有函数进行访问 7 1 4对象的定义 7 2构造函数和析构函数 7 2 1构造函数7 2 2析构函数7 2 3拷贝构造函数7 2 4静态成员7 2 5友元函数 7 2 1构造函数 数据成员多为私有的 要对它们进行初始化 必须用一个公有函数来进行 同时这个函数应该在且仅在定义对象时自动执行一次 这个函数被称为 构造函数 constructor 构造涵数的作用是 在对象被创建时用特定的值构造对象 将对象初始化为一种特定的状态 使该对象具有不同于其他对象的特征 构造涵数由系统自动调用 7 2 1构造函数 构造函数特征 1 函数名与类名相同 2 构造函数无函数返回类型说明 注意是什么也不写 也不可写void 3 在程序运行时 当新的对象被建立时 该对象所属的类的构造函数自动被调用 在该对象生存期中也只调用这一次 4 构造函数可以重载 严格地讲 说明中可以有多个构造函数 它们由不同的参数表区分 系统在自动调用时按一般函数重载的规则选一个执行 7 2 1构造函数 5 构造函数可以在类中定义 也可以在类外定义 6 如果类说明中没有给出构造函数 则C 编译器自动给出一个默认的构造函数 类名 void 但只要我们定义了一个构造函数 系统就不会自动生成默认的构造函数 只要构造函数是无参的或各参数均是有默认值的 C 编译器都认为是默认的构造函数 并且默认的构造函数只能有一个 7 2 1构造函数 Goods的构造函数 三参数 Goods char n inta floatp strcpy name n amount a price p tValue price amount 两参数 货名和单价 Goods char n floatp strcpy name n price p amount 0 tValue 0 0 默认的构造函数 Goods name 0 0 price 0 0 amount 0 tValue 0 0 这三个构造函数同时被说明 重载 7 2 1构造函数 构造函数应用 Goodscar1 夏利2000 30 98000 0 调用了Goods中的第一个构造函数 等效于 Goodscar1 Goods 夏利2000 30 98000 0 Goodscar2 桑塔那2000 164000 0 调用的是第二个构造函数 参数为两个 Goodscar3 定义时调用不带参数的构造函数但是定义对象时不能加括号 例如 Goodscar4 car4 是不带参数的函数 它的返回值是类Goods的对象 7 2 2析构函数 析构函数 destructor 特征 当一个对象的生命周期结束时 C 会自动调用析构函数 destructor 对该对象进行善后工作 1 构函数名与类名相同 但在前面加上字符 如 Goods 2 析构函数无函数返回类型 与构造函数在这方面是一样的 但析构函数不带任何参数 3 一个类有一个也只有一个析构函数 这与构造函数不同 析构函数可以默认 4 对象注销时 系统自动调用析构函数 7 2 3拷贝构造函数 拷贝构造函数的引入 同一个类的对象在内存中有完全相同的结构 如果作为一个整体进行复制是完全可行的 这个复制过程只需要复制数据成员 而成员函数是共用的 只有一份代码 在建立对象时可用同一类的另一个对象来初始化该对象 这时所用的构造函数称为拷贝构造函数 CopyConstructor 故 拷贝构造涵数是用一个已知的对象来初始化一个正在创建的同类对象 7 2 3拷贝构造函数 拷贝构造函数的一般格式 const 涵数体 特征 是一种构造涵数 与类名同名 不指定返回值类型 只有一个参数 且该参数是同类对象的引用 每一个类都必须有一个拷贝构造涵数 若类中没有定义拷贝构造涵数 则系统自动生成一个公有的拷贝构造涵数 7 2 3拷贝构造函数 例如 Goods constGoods 7 2 3拷贝构造函数 实拷贝构造涵数的调用实例 Goodscar1 夏利2000 30 98000 00 调用三个参数的构造函数Goodscar2 car1 调用拷贝构造函数Goodscar3 car1 调用拷贝构造函数 car1为实参这样三个对象的初始化结果完全一样 注意 在类定义中如果没有显式给出构造函数时 并不是不用构造函数 而是由系统自动调用默认的构造函数或默认的拷贝构造函数 如果有程序设计者定义的构造函数 包括拷贝构造函数 则按函数重载的规律 调用合适的构造函数 7 2 4静态数据成员 静态数据成员定义与使用 在类定义中 用关键字static修饰的数据成员为静态数据成员 该类所有对象共享由系统为静态成员分配的一个存储空间 而这个存储空间是在编译时分配的 在定义对象时不再为静态成员分配空间 静态数据是该类所有对象所共有的 可提供同一类的所有对象之间信息交换的捷径 7 2 4静态数据成员 静态数据成员定义与使用 静态数据成员属于整个类 使用时可用以下格式 类名 静态数据成员名 在类的外部使用时注意 1 静态数据成员在类中声明 但不能在其中定义 2 静态数据成员的初始化不能在构造函数中进行 7 2 4静态数据成员 例7 3 用静态数据成员计算由同一类建立的对象的数量执行程序后输出 对象数量 1 a 0 构造函数产生对象数量 2 a 1 构造函数产生对象数量 3 a 2 构造函数产生对象数量 2 a 2 析构函数产生对象数量 1 a 1 析构函数产生对象数量 0 a 0 析构函数产生 7 2 4静态成员函数 静态成员函数的引入 当一个函数不需要访问类中除静态数据成员之外的数据时 我们可以将其定义为静态成员函数 一般情况下 静态成员函数只能访问类中的静态数据成员 静态成员函数是被一个类中所有对象共享的成员函数 不属于哪个特定的对象 7 2 4静态成员函数 静态成员函数的使用 将成员函数说明为静态 使该成员函数与该类的不同对象无关 静态成员函数的调用 在对象之外可以采用下面的方式 类名 函数名 对象名 参数表 或者任一类对象名 函数名 对象名 参数表 静态函数成员多为公有的 7 2 4静态成员函数 静态成员函数的使用实例 在下面的程序中 将使用类Car为自己的每一个对象提供了对象ID号 创建或销毁对象时 将有一静态数据成员记录程序中的对象数 执行结果是显示对象ID及对象数 7 2 4静态成员函数 静态成员函数的使用实例 includeclassCar private staticintcounter 静态数据成员intid public Car 构造函数 Car 析构函数staticvoiddisplay 静态成员函数voiddisplayID 7 2 4静态成员函数 静态成员函数的使用实例 intCar counter 0 定义静态数据成员Car Car counter id counter Car Car counter cout Objectnumber id beingdestroyed voidCar display staticfunction cout Numberofobjectscreatedis counter endl voidCar displayID cout ObjectIDis id endl 7 2 4静态成员函数 静态成员函数的使用实例 intmain Cara1 Car display Cara2 a3 Car display a1 displayID a2 displayID a3 displayID return0 在C 中 友元 friend 函数允许在类外访问该类中的任何成员 就象成员函数一样 友元函数用关键字friend说明 由于类的封装性 只有类的成员涵数才能访问类的私有成员 而外部涵数只能访问类的公有成员 但有时需要在类的外部访问类的私有成员 以减少使用类的成员涵数访问私有成员而带来的参数传递 类型检查 安全性检查的时间开销 7 2 5友元函数 7 2 5友

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论