面向对象程序设计及C++ 第2版 教学课件 作者 朱立华 俞琼 第3章_类与对象new.ppt
文本预览下载声明
本章作业 作业本:本章习题:一、二(2 、 4) 、三、四(1 、 4) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * speciality computer 对象zhang 指针悬挂 析构时 浅拷贝 返回 对象wang speciality speciality 对象zhang speciality computer 对象zhang speciality computer 对象wang 深拷贝 3.4 对象的使用 3.4.1 对象数组 1.对象数组的定义 定义一个一维对象数组的格式如下: 类名 数组名[元素个数]; 与基本类型数组一样,在使用对象数组时也只能逐个引用数组元素,即每次只能引用一个对象,通过该对象,可以访问类的公有成员,一般格式如下: 数组名[下标] .成员名; 2.对象数组的初始化 对象数组元素的初始化需要遵循类对象的初始化原则。由于对象在创建与初始化时需要调用构造函数,因此,对象数组初始化时,每个元素都需要调用构造函数。如果定义数组时给每个数组元素以初值,则需要调用相应的带参的构造函数。 例如: Date dt[20]={Date(2011,5,1), Date(2011,10,1)}; 在建立对象数组时要充分考虑数组元素初始化的需要,在设计构造函数时要考虑参数的安排,无参、有参、带默认参数等,避免在创建对象时造成与构造函数不匹配的问题。 在vc环境下分析example3_14.cpp,建议单步方式运行 3.4.2 对象指针 对象指针的使用也是两种方式: 一种是将它指向一个已创建的对象,然后用指针访问对象的成员; 另一种方式是利用对象指针用new申请动态空间,生成一个动态对象或动态对象数组。 对象指针的定义格式: 类名 *对象指针名; 用指针引用单个对象成员的方法与其他基本数据类型指针相同,可以有两种形式: 指针变量名-成员名 或 (*指针变量名).成员名 对象数组名实际上就是对象指针常量,所以也可以用下面的方法引用成员: (对象数组名+下标)--成员名 或 *(对象数组名+下标) .成员名 【例3.15】 对象指针的使用示例。本程序包括Date4.h及example3_15.cpp两个文件。 运行example3_15.cpp文件 【例3.16】 用对象指针申请动态空间,生成动态对象、动态对象数组的使用示例。 运行example3_16.cpp文件 建议单步方式运行 3.4.3 对象引用 对象引用与一般变量的引用一样,是一个已经定义对象的别名,引用本身不再另外占用内存空间,因为它只是某对象的别名,可以认为引用与它所代表的对象共享内存单元。 运行程序example3_17.cpp,理解引用的用法 3.4.4 对象参数 在使用类类型作为函数的形式参数时,与普通数据类型一样,可以以类的对象作为值形式参数完成单向值传递,也可以以对象指针或引用为形式参数达到更方便高效地访问、修改对应的实际参数对象值的作用,从而更方便地完成函数间的信息传递。 1. 对象作为函数参数 对象可以作为函数的值形式参数,调用函数时用同类的实际参数对象与之对应。参数传递方法与传递其他类型的数据相同,是单向值传递。在函数调用之初需要用实际参数对象初始化形式参数对象,这就需要调用拷贝构造函数。由于单向值传递的关系,在函数中对形式参数对象的任何修改均不影响对应实际参数对象本身,这与一般类型变量作为值形式参数的单向值传递原理完全一样。 运行程序example3_18.cpp 对象指针作为函数参数 当对象指针作为函数的形式参数时,就可以通过单向传地址的方式来达到函数之间信息传递的目的,实参对象的地址传给对象指针形参时,不会产生新的对象,因此不会调用拷贝构造函数。函数中可以通过对指针所指向内容的修改达到改变对应实参对象值的效果。 运行程序example3_19.cpp,比较与example3_18.cpp的区别 3.对象引用作为函数参数 与其他类型的变量一样,对象引用既可以作为函数的形式参数,也可以作为函数的返回值。一般地,在面向对象程序设计中,多采用对象引用作为形式参数而不采用对象作为值形式参数。因为,通过传值方式来传递和返回对象时都会调用拷贝构造函数,会为形式参数对象分配空间,降低了时间和空间的效率。用对象引用作形式参数,在调用函数时使得引用参数成为实参对象的别名,不产生新对象,无需另外分配内存空间,也不会调用拷贝构造函数。 运行程序example3_20.cpp ,比
显示全部