C++面向对象程序设计实验指导书 实验九
delete[] alist; alist = new T[n]; if(alist == 0) Error(memoryAllocatetionError); size = n; }
T* destptr = alist; T* srcptr = rhs.alist; while(n--) *destptr++ = *srcptr++; return *this; }
template
T& Array
if(n < 0 || n > size-1) Error(indexOutOfRang); return alist[n]; }
void main() { }
9.2.2 程序设计
1.设计一个通用链表类,要求如下:
a.数据成员包含头指针、尾指针、链表中节点个数、顺序访问中当前节点指针和当前节点前一个节点的指针;
b.主要的成员函数包含:生成节点(在链表头、尾以及任意位置)、插入节点、删除节点、访问/修改节点、遍历链表,以及一些辅助函数等; c.能实现两个链表的复制;
d.能实现两个链表对象的赋值;
e.在测试程序中定义两个整型链表A和B,本别插入5个元素,然后把B中的元素加入A的尾部。
9.3思考题
1.根据数据结构和类模板知识,定义一个通用队列(先进先出)类并加以实现,编写主函数进行测试;
2.根据数据结构和类模板知识,定义一个通用栈(后进先出)类并加以实现,编写主函数进行测试。
32
C++面向对象程序设计实验指导书 实验十
实验十 C++的I/O流类库
10.1 实验目的
1.理解C++输入输出流类库;
2.掌握ios类中用于控制输入输出成员函数的使用; 3.掌握操纵符格式控制的使用;
4.掌握用户自定义数据类型的输入输出方式; 5.掌握文本文件和二进制文件的输入输出;
6.将C++输入输出流灵活应用到类和对象知识中。
10.2 实验内容 10.2.1程序阅读
1.阅读下列程序,然后上机运行验证输出结果,并回答下列问题。
#include \
void showflags(long f) {
long i = 0x8000; for(; i; i=i>>1) { if(i&f) cout<<\; else cout<<\; }
cout< void main() { showflags(cout.flags()); cout<<\< cout<<\< 33 C++面向对象程序设计实验指导书 实验十 } cout<<\< cout<<123<<\ \<<123.45678<<\ \<<234.567< cout<<\< cout<<\< cout<<123<<\ \<<123.45678< cout<<123<<\ \<<123.45678< cout<<\< showflags(cout.flags());----------------------------------------------------------② cout.setf(ios::right|ios::unitbuf); showflags(cout.flags());----------------------------------------------------------③ 问题一:①处的输出结果是什么,为什么? 问题二:②处的输出结果是什么,为什么? 问题三:③处的输出结果是什么,为什么? (提示:在x_flags变量中left=0x0002,right=0x0004,unitbuf=0x2000) 10.2.2 程序设计 1.采用预定义的输入输出操纵符格式控制改造10.2.1中第一题,使其达到相同的输出效果。 2.定义一复数类CComplex(类中含有实部real和虚部imag私有成员变量,都为double类型),重载输入运算符>>和输出运算符<<,使得该类可以直接通过输入输出运算符进行输入输出操作。 3.有一名为test.txt的文件,里面分两行分别存储了整数12345678和字符串abcdefg,设计两个完整的程序,第一个程序以文本文件的方式存取该文件,第二个程序以二进制的方式存取该文件,并比较以这两种方式存取该文件对文件本身有什么影响。 10.3思考题 1.设计一学生注册信息登记程序,该程序要求达到以下要求: a.学生信息包括姓名,学号,性别; b.学生信息要求能够循环从键盘输入,如果输入0 0 0,则退出输入; c.将所有输入的学生信息按文本文件的方式存储到一名为stureginfo.txt的文件中,文件中 34 C++面向对象程序设计实验指导书 实验十 存储信息的格式如下: 姓名:张三 学号:10521030146 性别:男 d.停止输入后,程序读出存储到stureginfo.txt文件中的所有信息,并显示在屏幕上。 35 C++面向对象程序设计实验指导书 实验十一 实验十一 C++程序、Windows程序和MFC 程序 11.1 实验目的 1.理解C++程序、Windows程序以及MFC程序之间的联系与区别; 2.理解Windows程序的消息机制; 3.学会应用VC++6.0的AppWizard创建基于MFC的Windows程序; 4.理解C++在MFC中的位置和作用。 11.2 实验内容 11.2.1 实验描述 1.理解C++程序、Windows程序和MFC程序的联系与区别 C++是面向对象编程语言中的一种,它具有封装性、继承性以及多态性三大特性,用C++语言写出来的程序需要借助编译器才能生成可执行的二进制代码,VC++6.0中具有能识别C++程序的编译器,所以VC++6.0可以用来作为C++程序的开发环境。 MFC(Microsoft Foundation Class)是微软公司开发出来的一套用于Windows程序开发的类库,MFC是建立在C++语言基础之上的,它利用C++语言的三大特性对自己进行了封装,极大地方便了用户在Windows上进行程序开发,同时MFC也借助AppWizard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。 Windows程序与其他程序最大的不同之处在于使用消息机制,在Windows程序中所发生的一切都可以用消息表示,消息用于告诉操作系统所发生的事情。在MFC中遵循Windows的消息机制,MFC对消息的处理利用了消息映射的方法,所谓消息映射就是将消息与处理函数相联系,即当系统产生一条消息时,它能找到处理该消息的函数,该方法的基础是宏定义实现。 2.Windows系统是一个消息驱动的OS,可以从以下几个方面来理解Windows的消息机制: ? 消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。 当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。 ? 谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对 消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。 36