C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计

上传人:E**** 文档编号:89381715 上传时间:2019-05-24 格式:PPT 页数:55 大小:400.50KB
返回 下载 相关 举报
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计_第1页
第1页 / 共55页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计_第2页
第2页 / 共55页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计_第3页
第3页 / 共55页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计_第4页
第4页 / 共55页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计》由会员分享,可在线阅读,更多相关《C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计(55页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计,连卫民 主编,中国铁道出版社 2008.9,第9章 复杂对象的程序设计,本章主要内容: 9.1 常对象、子对象和堆对象 9.2 对象数组(重点) 9.3 类型转换与转换函数(重点) 9.4 类作用域与对象的生存周期(重点) 9.5 综合应用实例 9.6 上机实训 本章教学目标: 了解常对象、子对象与堆对象,以及类型转换与转换函数的应用 熟悉类作用域与对象的生存期 掌握对象数组的使用方法,9.1 常对象、子对象与堆对象,9.1.1 常对象 常对象是指用const来修饰的对象。所以,可以将数据成员的值不能被修改的对象定义为常对象。使用常对象的好处在于可以提高操作的安全性。此外从系统角

2、度来说,这种做法还能提高运行性能,因为一些优化编译器能对常量进行某些无法对变量进行的优化。 1常对象的定义 常对象的创建和定义与一般变量的常量定义相似,定义格式为: const 类名 对象名(数据1,数据2,数据n); 其中,“const”是常对象的关键字。 常对象和一般常量一样,不能对其赋值,只能在定义时初始化。常对象只能使用常成员函数,而一般对象既可以使用一般成员函数,也能使用常成员函数。 2常对象的应用,第9章 复杂对象的程序设计,例9-1 定义一个描述时间的类,#include class Time private: int Hour,Minute,Second; public: Ti

3、me:Time() Time:Time(int h,int m,int s) Hour=h; Minute=m; Second=s; void SetTime(int h,int m,int s) Hour=h; Minute=m; Second=s; int GetHour()const return Hour; int GetMinute()const return Minute; int GetSecond()const return Second; void Print() const coutHour“:“Minute“:“Secondendl; ;,第9章 复杂对象的程序设计,例9

4、-1 定义一个描述时间的类,void main() Time t1; const Time t2(7,15,35); / 常对象必须初始化 t1.SetTime(18,23,40); t1.Print(); t2.SetTime(11,22,33); / 常对象不能修改数据成员,调试时去掉此行 t2.Print(); ,程序运行结果为: 18:23:40 7:15:35,第9章 复杂对象的程序设计,9.1 常对象、子对象与堆对象,9.1.2 子对象 当一个类的成员是某一个类的对象时,该对象就称为子对象。子对象实际就是某个类的对象成员。 1子对象的定义 class A private: 私有成员

5、声明或定义; public: 公有成员声明或定义; ; class B private:私有成员声明或定义; public: A a; / 子对象 其他公有成员声明或定义; ;,第9章 复杂对象的程序设计,9.1 常对象、子对象与堆对象,9.1.2 子对象(续) 当一个类的成员是某一个类的对象时,该对象就称为子对象。子对象实际就是某个类的对象成员。 2子对象的应用 在类中出现了子对象或对象成员时,该类的构造函数要包含对子对象的初始化。通常采用成员初始化列表的方法来初始化子对象。在成员初始化表中包含对子对象的初始化和对类中其他成员的初始化。同时在该类的输出成员函数中也要包括子对象的输出操作。,第

6、9章 复杂对象的程序设计,例9-2 子对象应用实例,#include #include class Date private: int Year,Month,Day; public: Date() Date(int y,int m,int d) Year=y; Month=m; Day=d; void SetDate(int y,int m, int d) Year=y; Month=m; Day=d; void PrintDate() coutYear“-“Month“-“Dayendl; ; class Student private: int Num; char Name10; Date

7、 Birth; / 子对象,第9章 复杂对象的程序设计,例9-2 子对象应用实例,public: Student() Student(int id, char na,int y,int m,int d) Num=id; strcpy(Name,na); Date br(y,m,d); / 包含子对象的初始化 Birth=br; void SetStu(int id, char na,int y,int m,int d) Num=id; strcpy(Name,na); Birth.SetDate(y,m,d); void Print() coutNum“ “Name“ “; Birth.Pri

8、ntDate(); ;,第9章 复杂对象的程序设计,例9-2 子对象应用实例,void main() Student stu1(20070106,“Liming“,1989,5,12); stu1.Print(); Student stu2; stu2.SetStu(20070209,“Wanghua“,1987,10,7); stu2.Print(); ,第9章 复杂对象的程序设计,程序运行结果为: 20070106 Liming 1989-5-12 20070209 Wanghua 1989-10-7,9.1 常对象、子对象与堆对象,9.1.3 堆对象 1堆对象的概念 堆对象是指在程序运行

9、过程中根据需要随时可以建立或删除的对象。这种堆对象被创建在内存一些空闲的存储单元中,这些存储单元被称为堆。这些存储单元可以被创建的堆对象占有,也可以通过删除堆对象而获得释放。 堆对象是在程序中临时创建的,在使用完毕后也需要释放其所占用的存储单元,因此堆对象在应用中需要两个重要标准运算符:new和delete 。 2new创建堆对象 new运算符的使用格式为:new 类型名 (初始值列表) 它表明在堆中建立一个由“类型名”给定的对象,并且由括号中的“初始值列表”给出被创建对象的初始值。如果省去括号和括号中的初始值,则被创建的对象选用缺省值。 例如,创建AA类的堆对象: AA *a1, *a2;

10、/ 创建两个对象指针 a1=new AA; / 创建堆对象,但不进行数据初始化 a2=new AA(5, 6); / 创建堆对象,通过类的构造函数初始化数据,第9章 复杂对象的程序设计,9.1 常对象、子对象与堆对象,9.1.3 堆对象(续) 3delete释放堆对象 delete运算符的使用格式为: delete 指针名; 例如: delete a1; delete a2; 在程序中,AA类定义了析构函数。而析构函数是在对象被释放前执行的,所以通过delete释放对象时,要执行析构函数。 delete同样也可以删除堆对象数组,释放其存储单元, 例如: delete a3; 在删除a3对象指针

11、的时候,析构函数会执行5次。,第9章 复杂对象的程序设计,例9-3 堆对象应用实例,4堆对象的应用 #include class Circle / 圆类 private: double X,Y,R; public: Circle() Circle(double x1,double y1,double r1) X=x1; Y=y1; R=r1; Circle() cout“对象已删除n“; void Set(double x1,double y1,double r1) X=x1; Y=y1; R=r1; void Print() cout“圆心:(“X“,“Y“)“ends; cout“半径:“

12、Rendl; ;,第9章 复杂对象的程序设计,例9-3 堆对象应用实例,void main() Circle c1(1,2,3),c2(4,5,6); Circle *cc; coutPrint(); delete cc; / 删除堆对象 ,第9章 复杂对象的程序设计,程序运行结果为: 输出c1对象:圆心:(1,2)半径:3 输出c2对象:圆心:(4,5)半径:6 输出c1对象:圆心:(4,5)半径:6 输出c2对象:圆心:(1,2)半径:3 输出当前cc对象:圆心:(1,2)半径:3 对象已删除 对象已删除 对象已删除,9.2 对象数组,对象数组是指数组元素为对象的数组,该数组中的若干个元素

13、必须是同一个类的若干个对象。引入对象数组是为了存储和方便处理同一类的多个对象。 9.2.1 对象数组的定义 1对象数组的定义 定义格式: 类名 数组名数组大小 其中,“类名”指出该数组元素是属于该类的对象,“数组大小”给出数组元素的个数。一维对象数组只有一个方括号,二维对象数组要有两个方括号。 例如: Date date17; / date1是一维对象数组 Date date277; / date2是二维对象数组,第9章 复杂对象的程序设计,9.2 对象数组,9.2.1 对象数组的定义(续) 2对象数组的初始化与赋值 对象数组可以在定义时初始化,也可以被赋值。假设有如下类: #include

14、class Date private: int Month, Day, Year; public: Date(int m, int d, int y) Month=m; Day=d; Year=y; void Print( ) coutMonthendsDayendsYearendl; ; 对象数组的初始化为: Date dates3=Date(7,6,2006), Date(7,7,2006), Date(7,8,2006) ; 对象数组元素的赋值为: Date dates3; dates0=Date(7,6,2006),dates1=Date(7,7,2006),dates2=Date(7

15、,8,2006);,第9章 复杂对象的程序设计,9.2 对象数组,9.2.2 对象数组的应用 对象数组的应用是在内存中开辟一块连续的多个同类的存储单元,这样方便管理也能提高访问效率。下面通过两个对象数组的基本应用来认识对象数组的应用方法。 对象数组的常规应用是对象数组元素的求极值和对象数组元素排序的问题。,第9章 复杂对象的程序设计,例9-4 对象数组应用实例,/ 下列代码保存在“rectarray.h”文件中。 #include class Rect private: int A,B,C,S; public: Rect() Rect(int a1,int b1) A=a1; B=b1; C=2*(A+B); / 获得矩形周长 S=A*B; / 获得矩形面积 void Print() cout“周长:“Cends“面积“Sendl; int Getc() return C; / 返回周长 int Gets() return S; / 返回面积 ;,第9章 复杂对象的程序设计,例9-4 对象数组应用实例,1对象数组求极值 定义对象数组并赋初值,求出周长的最大值,主函数的代码如下: #include “rectarray.h“ void main() / 下面定

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号