1、第10讲知识点介绍,1 友元的作用与特性2 友元函数3 友元类,第4单元 Time类,4.1 Time类需求分析与操作符重载,Time,友 元(friend),#include #include class Girl std:string name;long int teleNumber; /string public: Girl(std:string name,long int teleNumber) this-name = name; this-teleNumber = teleNumber; friend void disp( Girl ,友元函数,()友元函数的使用三个要点: 在类定义
2、中用关键字friend声明; 在类定义之外定义; 使用类对象引用作参数 ()外部友元函数的作用域是所在类的类作用域(从声明点开始到类名结束为止) ()友元函数不仅可以访问对象的公开成员,而且可以访问对象的私有成员。它的主要作用是作为访问对象的一个界面(接口),以提高程序的效率,友元成员函数,2. 友元成员函数 友元函数常常是另一个类的一个成员函数,这样通过友元函数可以使一个类对象可以直接访问另一个类对象的私有成员,这种成员函数不仅可以访问自己所在本类对象中的私有成员,还可以访问friend声明所在类的对象中的私有与公开成员 friend void Boy:disp(Girl ,友元类,3. 友
3、元类 一个类(如Boy),而不仅仅是一个成员函数,声明为另一个类(如Girl)的友元类。这时,只需先声明它(Boy),而不一定需要先定义friend void Boy:disp(Girl ,问题:系统内部存储素数,使用静态数组和动态数组存放区间的素数序列。 开始和结束区间,大小关系;多少个素数;哪些素数 Static Array:saArray常量大小;(后面细讲) Dynamic Array: *daArray;,动态内存分配,1. 用new进行动态内存分配(生) 用new进行动态内存分配,需要2个参数: 类型所分配的内存空间以多大为一个单位 数量分配的内存空间为多少个分配单位,当这个数量缺
4、省时为1个单位 最后返回一个指针所分配空间的地址这个地址是堆空间的一个地址,由编译器给出例如:,例如: int *ptrInt = new int; / 分配1个int空间,地址赋给ptrInt int* ptrInt = new int 10; / 分配10个int空间,地址赋给ptrInt double *ptrDouble = new double;/ 分配1个double空间,地址赋给ptrDouble double *ptrDouble = new double 3;/ 分配3个double空间,地址赋给ptrDouble 在分配一个单位空间时,还可以进行初始化 int *p5 =
5、new int(5); / 初始化为5 int *p0 = new int(); / 初始化为0 int *px = new int; / 初始值不可预测,回收动态存储空间(死),2. 用delete回收单个数据的动态存储空间 例如: delete ptrInt; / 释放ptrInt所指向的动态存储空间 delete ptrDouble;/ 释放ptrDouble所指向的动态存储空间 delete ptrInt;/回收数组ptrInt空间,(1)释放一个指针指向的动态存储空间时,不需要考虑该空间是否已被初始化过 (2)对一个指针使用delete后,并不将这个指针删除,它还指向先前的地址,只是
6、该地址不再有效,原指向的这片内存空间的不能再被使用。例如,有个基类Base和派生类Derived,则可以有如下操作 Base *ptr; / 声明一个指向基类的指针 / ptr = new Base; / 为ptr分配一个Base类型存储空间 delete ptr; / 释放ptr所指向的动态存储空间 ptr = new Derived; / 为ptr重新分配一个Derived类型存储空间 delete ptr; / 释放ptr所指向的动态存储空间,(3)当一个动态分配的空间不再需要时,一定要及时用delelte操作将之释放 (4)使用对象指针时,尽量避免多个指针指向同一对象 (5)当已经对一
7、个指针使用过delete,使其指向的内存释放后,再次使用delete,就会使运行的程序崩溃。克服的方法是将这个指针赋予0值。这样,即使对其再次实施delete,也可以保证程序是安全的,动态内存分配的异常处理,3. 动态内存分配中的异常处理 堆的存储空间是有限的,也有用尽的可能。在堆区已经用尽的情况下,继续请求动态分配,就会导致new操作失败,产生std:bad_alloc异常,std:bad_alloc异常定义在头文件 中。因此如果动态分配失败,程序应当进行异常处理,否则程序将会被终止,try ptrHour = new int (h);ptrMin = new int (m);ptrSec = new int (s);ptrName = new string (n);catch (bad_alloc const ,本讲内容回顾,1 友元的作用与特性 2 友元函数 friend classname foo(); 3 友元类 friend classname; 4 动态内存管理new delete,https:/ 1 友元的作用与特性2 友元函数3 友元类4 动态内存管理的使用步骤实验 实验1 简单类程序设计5 (作业、实验、课设等都提交到泛雅平台),