C++面向对象程序设计实验指导书

hdyu123156 贡献于2015-08-03

作者 刘恒洋  创建于2007-09-24 05:54:00   修改者张四全  修改于2007-12-24 16:28:00字数38904

文档摘要:实验作为学习C++语言不可缺少的一个环节不仅可以加深学生对C++面向对象思想的理解,同时可以提高学生的动手编程能力,培养学生良好的编码习惯。目前关于C++语言的理论教材比较多,但是适合学生练习的实验指导书却比较少,这严重影响了学生对C++这门课程的学习。大多数情况下,学生学习C++语言之前都刚刚学习过C语言程序设计这门课程,从编程环境到编程语言同时转换过来需要一定的时间和合理的指引,同时在学习C++理论知识的过程中,学生很少也很难把C++程序设计和现在社会上比较流行的基于VC6.0的MFC程序设计联系起来,所以很难让学生在学习C++语言的同时,提升学生基于VC6.0的MFC程序设计的能力。编写本书的目的就是从以上几点来考虑的,首先要把学生从以前的编程环境中脱离出来,然后循序渐进地介绍新的编程环境的新知识点,同时把C++的语法结构融入到基于VC6.0的MFC程序设计中去,从而实现学生轻松掌握C++这门程序设计语言和习惯编程环境以及理解C++语法和MFC之间的关系的目的,从而提高学生的程序设计能力和学生程序设计的成就感。
关键词:

 C++面向对象程序设计实验指导书 (v1.0) 刘恒洋 谭智编 重庆工学院计算机学院 2007年9月 C++面向对象程序设计实验指导书 目录 目录 绪论 1 0.1 写本书的目的 1 0.2 本书的结构安排 1 0.3 如何使用本书 2 实验一 C++基础 3 1.1 实验目的 3 1.2 实验内容 3 1.2.1 程序阅读 3 1.2.2 程序设计 5 1.3 思考题 5 实验二 类和对象—类的构建 6 2.1 实验目的 6 2.2 实验内容 6 2.2.1程序阅读 6 2.2.2 程序设计 8 2.3思考题 8 实验三 类和对象—构造函数与析构函数 9 3.1 实验目的 9 3.2 实验内容 9 3.2.1程序阅读 9 3.2.2 程序设计 10 3.3思考题 11 实验四 类和对象—对象传递与静态成员 12 4.1 实验目的 12 4.2 实验内容 12 4.2.1程序阅读 12 4.2.2 程序设计 15 实验五 派生与继承—单重派生 16 5.1 实验目的 16 5.2 实验内容 16 5.2.1程序阅读 16 5.2.2 程序设计 18 实验六 派生与继承—多重派生 19 6.1 实验目的 19 6.2 实验内容 19 6.2.1程序阅读 19 6.2.2 程序设计 22 6.3思考题 22 实验七 多态性—函数与运算符重载 23 7.1 实验目的 23 7.2 实验内容 23 7.2.1程序阅读 23 C++面向对象程序设计实验指导书 目录 7.2.2 程序设计 25 7.3思考题 26 实验八 多态性—类型转换与虚函数 27 8.1 实验目的 27 8.2 实验内容 27 8.2.1程序阅读 27 8.2.2 程序设计 29 8.3思考题 29 实验九 模板类的构造 30 9.1 实验目的 30 9.2 实验内容 30 9.2.1程序阅读 30 9.2.2 程序设计 32 9.3思考题 32 实验十 C++的I/O流类库 33 10.1 实验目的 33 10.2 实验内容 33 10.2.1程序阅读 33 10.2.2 程序设计 34 10.3思考题 34 实验十一 C++程序、Windows程序和MFC程序 36 11.1 实验目的 36 11.2 实验内容 36 11.2.1 实验描述 36 11.2.2 实验步骤 37 11.2.3 实验结果分析 43 11.3思考题 45 实验十二 简单单文档MFC程序设计 46 12.1 实验目的 46 12.2 实验内容 46 12.2.1 实验描述 46 12.2.2 实验步骤 47 12.2.3 实验结果 52 12.3思考题 53 实验十三 简单对话框程序设计 54 13.1 实验目的 54 13.2 实验内容 54 13.2.1 实验描述 54 13.2.2 实验步骤 54 13.2.3 实验结果 61 13.3思考题 61 实验十四 简单数据库程序设计 63 14.1 实验目的 63 14.2 实验内容 63 C++面向对象程序设计实验指导书 目录 14.2.1 实验描述 63 14.2.2 实验步骤 64 14.2.3 实验结果 71 14.3思考题 72 综合练习 73 总结 74 参考书目 75 C++面向对象程序设计实验指导书 绪论 绪论 0.1 写本书的目的 面向对象程序设计语言是现今最流行的编程语言之一,C++语言是作为最早最流行的面向对象编程语言之一而发展起来的。学好C++语言不仅可以从面向过程的程序设计思想过渡到面向对象的程序设计思想,而且可以为以后学习其它的面向对象语言打下坚实的基础,使得学习其它的面向对象编程语言变得轻松、容易。 实验作为学习C++语言不可缺少的一个环节不仅可以加深学生对C++面向对象思想的理解,同时可以提高学生的动手编程能力,培养学生良好的编码习惯。目前关于C++语言的理论教材比较多,但是适合学生练习的实验指导书却比较少,这严重影响了学生对C++这门课程的学习。大多数情况下,学生学习C++语言之前都刚刚学习过C语言程序设计这门课程,从编程环境到编程语言同时转换过来需要一定的时间和合理的指引,同时在学习C++理论知识的过程中,学生很少也很难把C++程序设计和现在社会上比较流行的基于VC6.0的MFC程序设计联系起来,所以很难让学生在学习C++语言的同时,提升学生基于VC6.0的MFC程序设计的能力。编写本书的目的就是从以上几点来考虑的,首先要把学生从以前的编程环境中脱离出来,然后循序渐进地介绍新的编程环境的新知识点,同时把C++的语法结构融入到基于VC6.0的MFC程序设计中去,从而实现学生轻松掌握C++这门程序设计语言和习惯编程环境以及理解C++语法和MFC之间的关系的目的,从而提高学生的程序设计能力和学生程序设计的成就感。 0.2 本书的结构安排 实验课程的安排离不开理论课程的学习,本书的编排以知识点为核心,理论教材蓝本为《C++面向对象程序设计教程》(第2版)陈维兴 林小茶编著,清华大学出版社出版。通过为不同的知识点设计相应的实验程序,来达到学生练习和理解C++语言面向对象的思想的目的,同时本书还设计了一些程序设计课后练习题,设计本部分有三个目的:一个是有些课堂练习中没有办法练习到的知识点将在这部分体现,指导老师可以根据需要来增删课堂的讲解内容;另一个是为一部分有能力有兴趣深入学习C++程序设计的同学提供一些练习题,从而提升这部分学生的程序设计能力;第三就是避免有些学生在做实验的过程中盲目按照指导书中的步骤一步一步地不加思考地写程序,学生要回答这些问题,就必须看懂这些程序中隐含的知识点,从而达到理论知识和实践知识更好地结合。 对于课堂练习,本书共安排了十个实验,共32个学时,实验安排如下: 实验一 C++基础 (2学时) 实验二 类和对象—类的构建 (2学时) 实验三 类和对象—构造函数与析构函数 (2学时) 实验四 类和对象—对象传递与静态成员 (2学时) 实验五 派生与继承—单重派生 (2学时) 实验六 派生与继承—多重派生 (2学时) 实验七 多态性—函数与运算符重载 (2学时) C++面向对象程序设计实验指导书 绪论 实验八 多态性—类型转换与虚函数 (2学时) 实验九 模板类的构造 (2学时) 实验十 C++的I/O流类库 (2学时) 实验十一 C++程序、Windows程序和MFC程序 (3学时) 实验十二 简单单文档MFC程序设计 (3学时) 实验十三 简单对话框程序设计 (3学时) 实验十四 简单数据库程序设计 (3学时) 另外本书还安排了第三部分—综合练习,作为学生提高部分,学生通过第三部分的练习不仅可以巩固前面学到的基本知识,还可以扩充相关方面的程序设计知识,更为重要的是可以让学生自主地设计一个完整的系统,从而达到提高学生综合程序设计能力的目的。 0.3 如何使用本书 面向对象程序设计语言出现的目的就是为了设计大型的软件系统,但是教学过程中很难让学生在课堂上实现一个大型的(甚至是成型)的系统,所以作为教师应该引导学生在实现一个简单的功能性的程序的同时让学生思考,思考如何把这个地方的技术实现到一个复杂的应用系统中去;另外教师要充分利用本书中第二部分的练习,引导学生去思考如何利用C++的相关技术从头到尾设计一个具有实用价值的应用程序。 作为学生如果只是简单地按照本书中提供的步骤一步一步完成某一个程序,而不去思考为什么要这样做的话,那么学生能学到的知识也仅仅是C++的语法而已,并不能真正理解C++面向对象的思想,最终不能设计出好的程序来。所以学生不仅要全部实现本书中的课堂练习,得出正确的结果,而且在完成了程序后还要思考本程序为什么要这样设计,如果换成其它的程序设计语言会怎么实现,只有这样才能够真正理解C++的精髓,从而掌握C++。 另外学生在学习最后四个实验的时候一定不要忘记前面C++语法知识,能否合理地将C++的三大特性运用到MFC的程序设计中是提高程序运行效率,存储效率和程序封装性一个最有效的手段。 学生在设计本实验指导书第三部分程序的时候,需要自己查阅相关方面的技术资料才能完成相关功能,因为安排这部分的目的就是为了提升学生自主学习的能力和综合程序设计能力,因此这部分的内容并没有安排相关理论知识的讲解。另外教师也可以把这部分的内容用于学生课程设计的程序设计题目。 注:本书中所有的程序都采用VC++6.0(英文版)编程环境,并且全部在该环境下编译运行通过! C++面向对象程序设计实验指导书 实验一 实验一 C++基础 1.1 实验目的 1.进一步了解和熟悉VC++6.0开发环境,学会在VC++6.0环境下调试程序; 2.熟悉C++中简单的标准输入输出函数的实用; 3.理解const修饰符的作用,并学会应用const修饰符; 4.理解内置(内联)函数的优缺点并学会使用内置函数; 5.理解和使用函数重载以及带默认参数的函数; 6.使用new和delete进行动态内存管理; 7.理解和使用引用。 1.2 实验内容 1.2.1 程序阅读 1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include int max_def(int x, int y) { return (x>y?x:y); } int max_def(int x, int y, int z) { int temp = 0; return (temp=(x>y?x:y))>z?temp:z; } double max_def(double x, double y) { return (x>y?x:y); } int main() { int x1 = 0; int x2 = 0; double d1 = 0.0; double d2 = 0.0; x1 = max_def(5,6); C++面向对象程序设计实验指导书 实验一 x2 = max_def(2,3,4); d1 = max_def(2.1,5.6); d2 = max_def(12.3,3.4,7.8);-----------------------------------------------------① cout<<"x1="< int month;//全局变量 int day; int year; void Set(int m,int d,int y) -----------------------------------------------------a { ::month=m; -----------------------------------------------------① ::day=d; ::year=y; } class CDate { public: void Set(int m,int d,int y) -----------------------------------------------------b { ::Set(m,d,y); -----------------------------------------------------② } void Print() { cout< class CPoint { public: unsigned x, unsigned y; bool IsInCircle(CCircle *Circle) { return (((x-Circle->Center.x)*(x-Circle->Center.x) +(y-Circle->Center.y)*(y-Circle->Center.y))<=Circle->Radius*Circle->Radius); } }; class CCircle { public: unsigned Radius; CPoint Center; }; void main() { } C++面向对象程序设计实验指导书 实验三 实验三 类和对象—构造函数与析构函数 3.1 实验目的 1.理解掌握this指针的作用和用法; 2.理解掌握构造函数的定义和作用; 3.掌握构造函数的使用; 4.理解掌握拷贝构造函数的定义和使用; 5.理解掌握构造函数的重载; 6.理解掌握析构函数的定义和使用。 3.2 实验内容 3.2.1程序阅读 1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include class CPoint { public: void Set(int x,int y); void Print(); private: int x; int y; }; void CPoint::Set(int x,int y) { x = x; y = y; } void CPoint::Print() { cout<<"x="< class CPerson { public: void Print(); private: CPerson(); private: int age; char *name; }; CPerson::CPerson() { } void CPerson::Print() { cout<<"name="< #include class CStudent { public: CStudent(char *n, int a); ~CStudent(); static void SetAge(int age); private: char *name; int age; static int nTotalObj; }; int CStudent::nTotalObj = 0; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; strcpy(name,n); name[nLen] = '\0'; C++面向对象程序设计实验指导书 实验四 nTotalObj++; } CStudent::~CStudent() { delete[] name; nTotalObj--; } void CStudent::SetAge(int age) { this->age = age; } void main() { CStudent stu1("张三",25); CStudent str2("李四",26); cout<<"CStudent::nTotalObj="< #include class CStudent { public: CStudent(char *n, int a); ~CStudent(); private: char *name; int age; }; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; C++面向对象程序设计实验指导书 实验四 strcpy(name,n); name[nLen] = '\0'; } CStudent::~CStudent() { delete[] name; } class CTeacher { public: CTeacher(char *tn, int ta); ~CTeacher(); void SetStuAge(int a); private: char *name; int age; CStudent stu; }; CTeacher::CTeacher(char *tn, int ta) :age(ta) { int nLen = strlen(tn); name = new char[nLen+1]; strcpy(name,tn); name[nLen] = '\0'; } CTeacher::~CTeacher() { delete[] name; } void CTeacher::SetStuAge(int a) { stu.age = a; } void main() { CStudent stu("张三",25); CTeacher tea("李四",26); C++面向对象程序设计实验指导书 实验四 } 问题一:以上程序有两大错误,试指出来,并改正之? 3.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include "iostream.h" class Date { private: const int year; const int month; const int day; public: Date(int y,int m,int d); void showdate(); }; Date::Date(int y,int m,int d) { year = y; month = m; day = d; } void Date::showdate() { cout<3) { cout<<"Out of range!"< #include //容错处理 enum ErrorType { invalidArraySize,memoryAllocatetionError,indexOutOfRang }; char *errorMsg[] = { "Invalid array size", "Memory allocation error", "Invalid index" }; template class Array { private: T* alist; int size; void Error(ErrorType error) const;//输出错误信息 public: Array(int sz=50);//构造函数 C++面向对象程序设计实验指导书 实验九 Array(const Array& X);//拷贝构造函数 ~Array(void);//析构函数 Array& operator=(const Array& rhs);//重载赋值运算符 T& operator[](int i);//重载下标运算符 int GetSize(void) const;//获取数组大小 void Resize(int sz);//重新设置数组大小 }; template Array::Array(int sz) { if(sz <= 0) Error(invalidArraySize); size = sz; alist = new T[size]; if(alist == 0) Error(memoryAllocatetionError); } template Array::Array(const Array& X) { int n = X.size; size = n; alist = new T[n]; if(alist == 0) Error(memoryAllocatetionError); T* srcptr = X.alist; T* destptr = alist; while(n--) *destptr++ = *srcptr++; } template Array::~Array() { delete[] alist; } template Array& Array::operator=(const Array &rhs) { int n = rhs.size; if(size != n) { 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::operator[](int n) { 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.根据数据结构和类模板知识,定义一个通用栈(后进先出)类并加以实现,编写主函数进行测试。 C++面向对象程序设计实验指导书 实验十 实验十 C++的I/O流类库 10.1 实验目的 1.理解C++输入输出流类库; 2.掌握ios类中用于控制输入输出成员函数的使用; 3.掌握操纵符格式控制的使用; 4.掌握用户自定义数据类型的输入输出方式; 5.掌握文本文件和二进制文件的输入输出; 6.将C++输入输出流灵活应用到类和对象知识中。 10.2 实验内容 10.2.1程序阅读 1.阅读下列程序,然后上机运行验证输出结果,并回答下列问题。 #include "iostream.h" void showflags(long f) { long i = 0x8000; for(; i; i=i>>1) { if(i&f) cout<<"1"; else cout<<"0"; } cout<
下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创文档 来获得金币奖励!

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档