- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++编程练习1动态数组(DynamicArray)类的封装练习.doc
C++编程练习1:动态数组(Dynamic Array)类的封装练习
程序环境
学习使用Visual C++ 6.0环境开始编程:学习最简单的使用Win32 Console Project (类似于Turbo C中的环境),使用说明可见:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/NewConsole.htm
编程规范
编写程序一定要养成良好的代码习惯。“程序不是写给自己看的,是写给别人看的”。
学习规范化编程,养成良好的习惯。可参考编程规范及技巧的文档:
/ligangliu/ForStudents/C++/CodingSkills.rar
/ligangliu/_download/Training/Documents/Talks/Coding/CodingBasicSkills.rar
注意:不同的团体、公司都有各自的编程规范,没有统一的编程规范。在编程训练的初期,只要选择自己喜欢的一套比较统一的编程规范来写即可,不必追求与上述文档完全一致的编程规范。以后随着编程水平的提高以及查看其他规范的代码后,可根据自己的喜好和合作团队的要求来不断调整自己的编程规范。
动态数组类的演示过程
使用固定大小的数组,如
double a[100];
有使用不方便的地方:数组大小固定,不灵活;如果程序使用的情况数组元素的个数多于100,则要改数组大小,然后重新编译程序;如果程序使用的情况数组元素的个数很少,则有大量的空间被浪费。
为了解决这个矛盾,可以使用动态分配内存空间的方法(需要对内存的动态分配的机制和原理了解和熟悉),即,
采用一个指针p记录数组的头地址;采用一个整数n记录数据元素的个数
程序运行时,用多少个元素n,就从内存中申请多少空间来存储数组p;p所指向的内存空间的数组元素总是n。n一旦变化,p即申请新的空间用来存储数组(当然需释放掉以前的内存空间,以免造成内存泄漏)。这样,对数组的操作是通过一些函数来操作:这些函数就是对操作这个数组的“接口”。
上述的程序大概形式可见:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array0.rar
由于p 和 n之间有强烈的逻辑关系,自然可以用struct将它们“包”在一起处理,见:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array1.0.rar
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array1.1.rar
这时发现那些操作数组的接口函数,都是操作struct的数据,自然可以想到将这些函数“放”到struct里面。在struct中放函数在C中是不行的,但是在C++中是可以的。这样大概如下形式:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array2.rar
此时发现,数据p,n及处理它们的函数都“包”在一起,放在一个struct中,这就是对它们的一种封装。用户只要操作这个struct的函数,就可以操作一个“数组”。
我们将关键词struct改为class,然后将函数的类型改为public,其他不变,这个程序就可以编译运行。这事实上就是一个简单的C++的程序,并且大致完成了一个class!见:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array3.rar
在写C++程序时,一般一个类需要2个文件,一个头文件*.h(定义了这个类的接口),一个实现文件*.cpp(具体这个类的实现),见:
/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array4.rar
希望上述过程好好体会一下。注意:上述的代码都不太符合编程规范,只是演示了大致的一个过程。你需按照严格的编程规范来完成该练习。
作业及要求
现在要求动态数组的类的接口如下:
class DArray
{
private:
double *m_pData; // 存放数组的动态内存指针
int m_nSize; // 数组的元素个数
private:
void Init(); // 初始化
void Free(); // 释放动态内存
inline int InvalidateIndex(int nIndex); //
文档评论(0)