C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 吕凤翥 王树彬_ 第7章 类和对象(二)
第7章 类和对象(二),7.1 对象指针和对象引用,1指向对象的指针的定义、赋值及应用,7.1.1 对象指针,指向对象的指针的定义格式如下: *=,对象指针也可以被赋值,赋值的方法通常有如下两种。 使用同类对象的地址值给对象指针赋值。 使用运算符new为对象指针赋值。 指针对象成员的表示使用运算符。 指向对象的指针主要用来作函数参数和返回值。 见书中例7.1。,(1)指向对象的常指针 指向对象的常指针定义格式如下: * const ; 该指针的地址值是常量不得改变,而该指针所指向的对象可以改变。 见书中例7.2,例7.3。,2指向对象的常指针和指向常对象的指针,this指针是系统创建的,用它来指向正在被某个成员函数所操作的对象。 在实际应用中this指针被隐含了。在需要时也可以显示出现this表示指向对象的指针。 见书中例7.4。,7.1.2 this指针,对象引用的定义格式如下: & = 对象引用常用来作函数的形参。当函数形参为对象引用时,则要求实参为对象名,实现引用调用。 见书中例7.5。,7.1.3 对象引用,7.2 对象数组和对象指针数组,相同类的若干个对象的集合构成一个对象数组。对象数组的定义格式如下。 对象数组元素可以被赋值。 见书中例7.6。,7.2.1 对象数组,对象指针数组是指数组的元素是指向对象的指针,并要求所有数组元素都是指向相同类的对象的指针。其格式如下: * 对象指针数组可以被初始化,也可以被赋值。 见书中例7.7。,7.2.2 对象指针数组,指向对象数组的指针可以指向一维对象数组,也可以指向二维对象数组。 指向一维对象数组的一级指针定义格式如下: (*) 见书中例7.8。,7.2.3 指向对象数组的指针,7.3 子对象和堆对象,7.3.1 子对象,在一个类中可以使用另一个类的对象作其数据成员,这种对象的数据成员称为子对象。子对象反映两个类之间的包含关系。,子对象初始化应放在构造函数的成员初始化列表中。成员初始化列表放在构造函数的函数头的后面,用冒号进行分隔。具体格式如下: (): 见书中例7.9。,1使用new运算符创建堆对象,7.3.2 堆对象, 使用new运算符创建一个对象或其他类型变量的格式如下: new ; 或者 ();, 使用new运算符创建一个对象数组或其他类型数组的格式如下: new ; 或者 ;,对象数组创建后可使用如下语句,判断创建是否成功: if(parray= =NULL) cout“数组创建失败!/n“; exit(1); 使用new所创建的数组,可以给其元素赋值。,1使用new运算符创建堆对象,7.3.2 堆对象, 使用new运算符创建一个对象或其他类型变量的格式如下: new ; 或者 ();, 使用new运算符创建一个对象数组或其他类型数组的格式如下: new ; 或者 ;,对象数组创建后可使用如下语句,判断创建是否成功: if(parray= =NULL) cout“数组创建失败!/n“; exit(1); 使用new所创建的数组,可以给其元素赋值。,delete运算符的功能是用来释放使用new运算符创建的堆对象和堆对象数组的。 使用delete运算符释放对象或变量的格式如下: delete ;,2使用delete运算符释放对象, 使用delete运算符释放对象数组或其他类型数组的格式如下: delete ; 见书中例7.10。,7.4 类的作用域和对象的生存期,7.4.1 类的作用域,类的作用域简称为类域。类域的范围是指该类所定义的类体内 。每个类都具有一个类域,该类成员属于该类的类域。 类域介于函数域和文件域之间,文件域中可包含类域,类域中可包含函数域。,在C+语言中,对象的存储类有如下3种: 局部对象; 全部对象; 静态对象(又分内部静态与外部静态)。,7.4.2 对象的生存期,局部对象是被定义在一个函数体内或一个分程序中,其作用域是该函数体或该分程序内。,1局部对象,全局对象是被定义在某个文件中,它的作用域是整个程序。,2全局对象,静态对象按其作用域不同又分为内部静态对象和外部静态对象两种。内部静态对象的作用域是定义它的函数体或分程序内;外部静态对象的作用域是定义它的文件,并从定义时开始。 见书中例7.11。,3静态对象,7.5 结构的应用,结构是一种构造数据类型,具有这种数据类型的变量称为结构变量。 结构类型定义格式如下: struct ;,1结构变量的定义和应用,7.5.1 结构变量和结构数组,定义结构变量的格式如下: struct ; 结构变量的成员表示规则如下: 一般结构变量的成员用运算符.表示。 指向结构变量的指针的成员用运算符-表示。 结构数组元素的成员表示用运算符.。,结构变量可以被赋初值,也可以被赋值。 给指向结构变量的指针初始化可以用相同结构类型的结构变量的地址值或用存储分配函数malloc()。,结构变量的赋值规则如下。 可以将一个结构变量的值赋给另一个相同结构类型的结构变量。 结构变量的运算主要是该结构变量的成员的运算。结构变量成员的运算取决于该成员的类型。结构变量整体运算只有赋值运算。 见书中例7.12。,结构变量和指向结构变量的指针在程序中通常作为函数的参数和函数的返回值。结构变量作函数参数实现传值调用,其调用效率较低,指向结构变量的指针作函数参数实现传址调用,其调用效率较高。 见书中例7.13。,数组元素为结构变量的数组称为结构数组。 结构数组中各个元素必须是相同结构类型的结构变量。结构数组可以在定义或说明时用初始值表进行初始化,也可以使用赋值表达式语句对结构数组的各个元素的成员赋值。 见书中例7.14。,2结构数组,在C+语言中,可以使用同样的关键字 struct定义类,其格式如下: struct ; ,7.5.2 使用struct定义类,使用struct关键字定义的类与使用class关键字定义的类唯一区别是使用struct定义的类中默认访问权限的成员是公有的,而使用class定义的类中默认访问权限的成员是私有的。 见书中例7.15。,作业题和上机练习题,