《C++程序设计》实验指导书.doc

上传人:飞****2 文档编号:52217657 上传时间:2022-10-21 格式:DOC 页数:8 大小:34KB
返回 下载 相关 举报
《C++程序设计》实验指导书.doc_第1页
第1页 / 共8页
《C++程序设计》实验指导书.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《《C++程序设计》实验指导书.doc》由会员分享,可在线阅读,更多相关《《C++程序设计》实验指导书.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C+程序设计实验指导书东北大学软件学院2009年9月实验要求C+程序设计课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实验,使学生加深了解和更好地掌握C+程序设计课程教学大纲要求的内容。在C+程序设计的课程实验过程中,要求学生做到:(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。(2)仔细观察程序调试过程中出现的各种问题,记录主要问题,作出必要说明和分析。(3)认真书写实验报告。(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。(5)实验课程不迟到。如有事不能出席,所缺实验一般不补。(6)本实验采用的开发环境为Microsoft Vis

2、ual C+ 6.0,同学在做实验之前要求熟悉该集成开发环境。实验的验收将分为两个部分。第一部分是上机操作,包括检查程序运行和即时提问。第二部分是提交书面的实验报告。实验1 C+面向对象程序设计(4学时)1. 实验目的1) 学习类与对象的定义、声明及使用方法。2) 学习具有不同属性的数据成员与成员函数的访问方式。3) 理解构造函数和析构函数的定义与执行过程。4) 学习定义和使用类的继承关系,定义派生类。5) 学习使用虚函数实现动态多态性。6) 学习利用虚基类解决二义性问题。2.实验类型设计型。3.实验基本要求1) 下面是“平面上点”类的定义:class CPointprivate:int x,

3、 y;static int nCount; / nCount用于保存点的个数public:CPoint(int px=0, int py=0);CPoint(CPoint&);CPoint();int GetX();int GetY();void SetX(int);void SetY(int);void ShowPoint();请完成该类中各成员函数的定义。2) 下面是“平面上线段”类的定义:class CLineprivate:CPoint pt1, pt2; /pt1和pt2分别代表该线段的起点和终点public:CLine();CLine(int x1,int y1,int x2,in

4、t y2);CLine(CPoint p1,CPoint p2);double Distance(); /计算该线段长度的成员函数void ShowLine();请完成该类中各成员函数的定义。并利用VC调试工具观察含有组合关系类的构造函数和析构函数的执行情况。3) 下面是“空间中点”类的定义:class CThreePoint:public CPointprivate:int z;public:CThreePoint();CThreePoint(int, int, int);int GetZ();void SetZ(int pz);virtual void ShowPoint();请完成该类中

5、各成员函数的定义。并利用VC调试工具观察含有继承关系类的构造函数和析构函数的执行情况。分析为什么要把ShowPoint()函数设置为虚函数?有什么作用?请在main()函数中做测试。4) 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?把age改为保护成员变量呢?编程试试看。5) 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行

6、车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。6) 参考题目2中Cline类的编写,编写一个空间中线段CThreeLine类。并在该类中观察构造函数的执行顺序。(选做)4.实验基本步骤1) 该类是一个基本的类。在编写该类时,要注意对静态成员nCount的操作,使其能够正确表示程序中点的个数。编完

7、该类后,要在main()函数中进行测试,分别定义CPoint类的对象、指针、引用,对各成员函数进行调用。分析对静态成员的调用和一般成员的调用方式有什么不同。2) 要思考如何对类中3个构造函数CLine(),CLine(int x1,int y1,int x2,int y2)和CLine(CPoint p1,CPoint p2);的编写,分析什么是初始化列表。完成后要在main()中进行测试。3) 编程时重点分析CThreePoint类的构造函数如何编写,并通过调试运行查看在继承关系中构造函数的执行顺序。4) 编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函

8、数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:error C2248:age:can not access private member declared in class Animal把age改为公有成员变量后重新编译就可以了。再把age改为保护成员变量步骤相同。5) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle),汽车(motorcar),从bicycle和motorcar派生出摩托车(motorcycle),它们都有Run、Stop等成员函数。在main ( )函数中定义vehicle,bicycl

9、e,motorcar,motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。6) 空间中线段CThreeLine类可含有和Cline类相同的成员,但所含的数据成员都必需为空间中的点。要在main()函数中观察该类对象构造函数的执行顺序。5.实验思考题1) 构造函数和析构函数的作用是什么?2) 什么是封装?类是如何进行封装的?3) C+中有哪几种派生方式?每种方式的派生类对基类成员的继承和访问控制属性是什么样的?4) 派生类对象和基类对象是什么样的关系?派

10、生类对象的构造函数和析构函数的执行顺序是怎样的?5) 什么是多态?在C+语言中,是如何实现多态的?实验2 模板与STL(4学时)1.实验目的1) 理解什么是通用编程技术。2) 加强对模板相关概念的理解,熟悉模板编程的语法。3) 学习编写简单的函数模板和类模板。4) 理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。5) 掌握STL中Vector容器的使用方法。6) 练习使用STL进行编程,加强是通用编程技术的理解。2.实验类型设计型3.实验基本要求1) 编写一个函数模板,要求它返回两个值中的最小者。但同时要确保正确处理字符串。2) 以下是一个整数栈类的定义:const int SIZ

11、E = 100;class Stackpublic: Stack(); Stack(); void Push(int n);int Pop();private:int stackSIZE;int tos;编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据操作。并在应用程序中创建整数栈、字符栈和浮点数栈,提供一些数据进行进栈、退栈和打印操作的测试。3) 编写一程序,让用户自由地从键盘上输入整数,直到输入数字0时结束。把用户输入的数据保存在模板类Vector定义的对象中,并对用户输入的所有数进行排序输出。在向显示器进行输出时,要求用一下3种方式实现:a) 仅使用Vecto

12、r的相关成员函数,不使用迭代器进行输出;b) 使用迭代器自己编程输出;c) 使用STL提供的通用算法for_each进行输出。4) 以下是一个List类模板的定义:template class Listpublic: List(); /构造函数 void Add(T&); /在Link表头添加新结点 void Remove(T&); /在Link中删除含有特定值的元素 T* Find(T&); /查找含有特定值的结点 void PrintList(); / 打印输出整个链表 List();protected: struct Node Node* pNext; T* pT; ; Node *pF

13、irst; /链首结点指针;完成对上述List类模板含有的各成员函数的定义。然后定义一个简单的Student类,并利用编写的List类模板对一个班级的学生进行动态管理。(根据自己的能力选做)。4.实验基本步骤1) 函数模板的原型可定义为:template T min(T&, T&),为了同时要确保正确处理字符串,而字符串不能用“”来比较,所以还需要特别定义函数:char* min(char* a, char* b)。另外,要在main函数中对自己编写的模板进行测试。2) 根据整数栈的定义,可抽象出的栈类模板为:templateclass Stackpublic: Stack(); Stack(

14、); void Push(T& n); T Pop();private: static const int SIZE; T* stack; int tos;这里需要将该模板中的各成员函数进行定义即可。tos是栈顶位置,Push()为压栈操作,Pop()为弹栈操作,要在这两个操作中分别考虑栈的长度和栈是否为空。最后,要在main函数中对编写的栈类模板进行测试。3) 实现该题目时,首先定义模板类Vector的一个对象,利用该对象进行对用户输入数据的操作。在进行数据输出时,第一种方式考虑采用类似于数组的随机访问方法,第二种方式利用Vector的迭代器进行输出,第二种方式则利用STL通用算法for_each进行实现,也可以才用copy函数进行实现。4) 要编写出这个程序,要理解Link类模板中各数据成员的含义。pFirst代表链表首指针,Node代表链表的一个结点,pT为指向该结点对应数据的指针,理解这点非常重要。5.实验思考题1) 谈谈使用模版进行编程的优点?2) 什么是函数模板和模板函数?两者之间是什么关系?3) 什么是类模板和模板类?两者之间有什么关系?4) STL中容器、迭代器和算法三者之间的关系?5) STL中为什么要提供通用算法?它和类模板的成员函数相比,有什么特征?

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com