2022年计算机二级考试C++复习资料:类和堆

上传人:鑫** 文档编号:252977565 上传时间:2022-02-11 格式:DOCX 页数:3 大小:30.81KB
返回 下载 相关 举报
2022年计算机二级考试C++复习资料:类和堆_第1页
第1页 / 共3页
2022年计算机二级考试C++复习资料:类和堆_第2页
第2页 / 共3页
2022年计算机二级考试C++复习资料:类和堆_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《2022年计算机二级考试C++复习资料:类和堆》由会员分享,可在线阅读,更多相关《2022年计算机二级考试C++复习资料:类和堆(3页珍藏版)》请在金锄头文库上搜索。

1、2022年计算机二级考试C+复习资料:类和堆一、构造函数和析构函数前面的例子已经运用了new和delete来为类对象安排和释放内存。当运用new为类对象安排内存时,编译器首先用new运算符安排内存,然后调用类的构造函数;类似的,当运用delete来释放内存时,编译器会首先调用泪的析构函数,然后再调用delete运算符。 #include iostream.h class Date int mo,da,yr; public: Date() cout name; nmi = new Names(name); for(i=0; i nmi- display(); delete nmi; return

2、 0; 上面的程序提示输入5个姓名,然后显示它们。程序中定义了名为Names的类,它的构造函数初始化对象的name值。这个类定义了自己的new和delete运算符。这是因为程序能保证不会一次运用超过maxnames个姓名,所以可以通过重载默认的new和delete运算符来提高运行速度。 Names类中的内存池是一个字符数组,可以同时容纳程序须要的全部姓名。与之相关的布尔型数组inuse为每个姓名记录了一个true和false值,指出内存中的对应的项是否正在运用。 重载的new运算符在内存池中找寻一个没有被运用的项,然后返回它的地址。重载的delete运算符则标记那些没有被运用的项。 在类定义中

3、重载的new和delete运算符函数始终是静态的,并且没有和对象相关的this指针。这是因为编译器会在调用构造函数之前调用new函数,在调用析构函数后调用delete函数。 new函数是在类的构造函数之前被调用的。因为这时内存中还不存在类的对象而且构造函数也没有供应任何初始化值,所以它不行以访问类的任何成员。同理,delete运算符是在析构函数之后被调用的,所以它也不行以访问类的成员。 四、异样监测和异样处理 1.检测异样 上面的例子还缺少必要的爱护机制。比如,重载的delete运算符函数并没有检查它的参数,确认其是否落在内存池内部。假如你肯定信任自己编的程序中不会传递错误的指针值给delet

4、e运算符,那么可以省掉合法性检查以提高效率,特殊是在优先考虑效率的程序中。否则应当运用预编译的条件语句。在软件的测试版本中加入这些检测,在正式的发行版本中去掉这些检查。 2.重载new和delete中的异样处理 上面的两个重载运算符函数都是用了异样处理。异样处理是C+的新内容之一,目前还没有讲到。在这里不必关切它是如何工作的。上面程序中,当试图安排超过内存池容量的Names缓冲区,重载的new运算符函数就会抛出异样,终止程序。 五、重载new和delete 对于上面的程序,假如有下面的语句: Names *nms=new Names10 . delete nms; 那么,这些语句会调用全局ne

5、w和delete运算符,而不是重载过的new和delete。为了重载能为对象数组安排内存的new和delete运算符,必需像下面的程序一样,对new和delete也进行重载。 #include iostream.h #include string.h #include stddef.h #include new.h const int maxnames = 5; class Names char name25; static char Names:pool; static bool Names:inusemaxnames; public: Names(char* s) strncpy(name

6、,s,sizeof(name); void* operator new(size_t) throw(bad_alloc); void operator delete(void*) throw(); void display() const cout name; *(np + i) = name; for(i=0; idisplay(); delete np; return 0; 重载new和delete要比重载new和delete考虑更多的问题。这是因为new运算符时为数组安排内存,所以它必需记住数组的大小,重载的delete运算符才能正确地把缓冲区释放回内存池。上面的程序采纳的方法比较简洁,吧原来存放缓冲区运用标记的布尔型数组换成一个整型数组,该数组的每个元素记录new运算符安排的缓冲区个数,而不再是一个简洁的true。当delete运算符函数须要把缓冲区释放回内存池时,它就会用该数组来确认释放的缓冲区个数本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第3页 共3页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页第 3 页 共 3 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

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