原创 C++ 程序设计五——类

2009-7-7 11:02 2380 7 7 分类: 软件与OS
rar


一、实验目的



l        
熟悉、掌握类的设计与实现



 



二、实验环境



P4 1.7G计算机一台,Windows XP操作系统,Microsoft Visual C++ 2005编程环境。



三、实验内容及分析



根据题目要求编写程序,验证程序的正确性。撰写实验报告并提交纸质版本,程序源代码的电子版发送至教师的Email信箱。



 



(一)



1.        
题意描述:



练习11-5。用改进后的类执行6.3.1 6.3.2节中的extract_fails函数,写主程序测试,并分析性能。



 



2.        
问题分析与解决



先考虑如何使用Student_info类统计它的对象被创建、复制、赋值和销毁的次数。分别定义与之对应的接口。根据他们的含义,创建的次数只需统计构造函数创建的,复制只需要统计复制构造函数的,赋值只需要统计赋值操作符而销毁对应的要统计析构函数。



然而,类中并没有定义复制、赋值和销毁函数,故还需要对它们进行定义。并用3个无符号整形变量保存统计结果。



3.        
调试、测试运行情况及结果分析



复制构造函数的行参类型应为const的引用。





结果分析,两者在内存上的使用差别并不大,两者的主要差别在时间复杂度上。



(二)



1.        
题意描述:练习11-6



 



2.        
问题分析与解决



对于这个题目只需要写iterator erase(iterator _Where)iterator
erase(iterator _First, iterator _Last)
两个函数即可,因为clear在原来的类中已存在。



对于这两个函数,都是关于删除元素的,只要注意,删除后更新avail即可。在这两个函数中,我并没有将内存释放,因为我认为只是删除一些元素,没有并要去释放它们。而释放它们还要跟新limit,划不来。



3.    调试、测试运行情况及结果分析



在类外部使用Vec<T>iterator定义这两个函数时总是发生一些莫名其妙的错误,用cfree尝试了,发现能通过编译但只对第一个erase函数能使用,对它的重载还是不行,只好将函数定义移至类的内部。







运行结果表明,在四个元素的时候,程序是正确的,调试结果表明,当删除的元素越界时会抛出异常。



(三)



1.        
题意描述:为Str类添加关系操作符’<’ ‘>’ ‘==’ ‘!=’   



 



2.        
问题分析与解决



由于这些操作符号,都不影响Str类对象的属性,所以将它们声明为非成员函数。对于大于小于操作符可以使用lexicographical_compare函数,该函数true if the first range is lexicographically less than the second range;
otherwise false.
对于相等和不等操作符,可以使用equal function,该函数true if and only if the ranges are
identical or equivalent under the binary predicate when compared element by
element; otherwise, false.



3.        
调试、测试运行情况及结果分析





(四)



1.        
题意描述:练习 12-13



Provide an assignfunction that could be used to assign the values in an array to a Vec.



2.        
问题分析与解决



为了解决这个问题需要知道数组的长度,可以用sizeof(arry)/sizeof(arry[0]) 求得。只要用到copy函数接下来问题就很容易解决了。



3.        
调试、测试运行情况及结果分析



使用sizeof(arry)/sizeof(arry[0])不能求出動態分配內存數組的數目,原因可能是傳進的是指針,所以只好用靜態分配。




PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条