
《C++程序设计》实验指导书.docx
47页杜红燕 编《 C++ 程序设计》课程实验指导书长沙学院计算机科学与技术系前 言本书是《 C++ 程序设计》课程的实验指导书初学程序设计的人,都有一个体会,看程序容易, 但自己动手写程序难, 甚至感觉无从下手, 究其原因就在于没有把握住学习程序设计的根本方法, 学习程序设计的关键是多实践, 通过上机体会和掌握程序设计的思想和方法,通过上机验证程序的正确性,为此我们编写了这本实验指导书本书的主要内容分为三个部分, 第一部分为实验内容, 对每个实验的实验目的、 实验类型、实验学时、实验原理及知识点、实验环境(硬件环境、软件环境)和实验内容及步骤进行简单介绍, 第二部分为实验指导, 对每个实验的实验方法, 实验步骤及补充的实验知识进行详细介绍,第三部分为实验报告C++ 程序设计的环境有许多,在这里我们选用的是 MicroSoft Visual C++ 6.0对书中的每个实验题目, 在实验指导部分都给出了编程提示, 个别实验给出了程序的参考代码, 最后还介绍了常用标准库函数的函数原型需要强调一点, 程序设计是一个创作的过程, 解决一个问题的方法不是唯一的, 所以请大家在阅读本书的实验指导之前, 已经独立思考过对这些问题的解决方法, 这样才有助于程序设计水平的提高。
编者2008年2 月1目 录第一部分 实验内容1224384 I/O.11513第二部分 实验指导Visual C++ 6.0.161262313344 I/O..39543C/C++46I第一部分实验内容1实验 1:类的定义和构造一、实验目的1、掌握类的定义和使用2、学习构造类的方法3、掌握如何定义构造函数和析构函数4、掌握初始化对象的方法5、理解面向对象程序设计的思想二、实验类型 验证三、实验学时 4 学时四、实验原理及知识点1、类的定义2、类成员的访问控制3、类的数据成员和成员函数4、构造函数和析构函数5、对象的定义与初始化五、实验环境(硬件环境、软件环境)1、软件: Windows 操作系统, Visual C++ 6.02、硬件: CPU 奔腾Ⅲ;内存 64 兆以上(最好 128 兆以上);六、实验内容及步骤1、定义一个描述学生通讯录的类,数据成员包括:姓名、学校、号码和邮编;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值2、将第一个上机实验题中的成员函数 Init 改为构造函数,将成员函数 FreeSpace 改为析构函数增加一个缺省的构造函数,使指针 pName, pSchool 和 pNum 的初值为 0,使 Box 包含空字符串。
3、定义分数类 Rational ,要求在 private 部分用整数表示分子和分母,分子和分母以简化形式表示,即 24/36 应该以 2/3 的形式表示,并提供 public 成员函数实现如下功能:( 1) 两个分数相加,结果表示为简化形式;( 2) 两个分数相减,结果表示为简化形式;( 3) 按 a/b 的形式输出分数的值, a、 b 为整数;( 4) 按浮点数的形式输出分数的值七、思考与练习1、编写 Time 类,要求:( 1) 包含年、月、日、时、分、秒的信息;( 2) 构造函数将类的对象初始化为系统当前时间 (使用头文件 time.h 中的 time() 函数);( 3) 能按标准格式输出对象表示的时间2、编写矩形类,要求可以提示用户输入矩形的长度和宽度,并显示该矩形的长度、宽度和面积2实验 2:堆与拷贝构造函数、静态成员与友元、运算符重载一、实验目的1、领会拷贝构造函数的实质2、学会使用堆对象的分配与释放3、领会运算符重载的意义4、学会使用 this 指针5、理解友元的语法和含义6、在此基础上领会和掌握面向对象的程序设计思想二、实验类型 验证三、实验学时 4 学时四、实验原理及知识点1、堆对象的分配与释放2、拷贝构造函数3、类的复合4、This 指针5、静态数据、友元函数和友元类6、运算符重载的概念7、单目运算符重载8、双目运算符重载9、重载流插入和流提取运算符10、赋值运算符重载五、实验环境(硬件环境、软件环境)1、软件: Windows 操作系统, Visual C++ 6.02、硬件: CPU 奔腾Ⅲ;内存 64 兆以上(最好 128 兆以上);六、实验内容及步骤1、建立一个 Stock 类,含有股票代码和股票现价两个数据成员。
用 new 自动为 Stock 类的对象分配内存,并将股票 ”600001 ”,现价 8.89 存入内存的相应域中在类中增加静态数据成员记载创建对象的个数,增加拷贝构造函数并调用2、对如下圆柱类 Column 的定义:class Column {public:Column(double x, double y, double r, double h);~Column();3double area(); //求圆柱面积double volume(); //求圆柱体积private:double height; //高度double radius; //半径double x; //底面圆心 x 坐标double y; //底面圆心 y 坐标};要求:( 1) 实现类 Column 中的四个成员函数;( 2) 增加一个友元函数,实现从键盘读取四个 double 类型的数据对类 Column 的对象进行赋值的功能;( 3) 增加一个友元函数,实现将类Column 的对象输出到屏幕的功能,输出信息包括对象的基本信息以及对象的面积和体积3、对于下面定义的类 Test:class Test {private:int a;double b;};要求:( 1) 为类 Test 的每个数据成员增加一个 set函数,并使这些 set 函数都可以被连续调用;( 2) 为类 Test 的每个数据成员增加一个 get 函数。
3) 如果要求所有 get 函数都可以被连续调用,这些函数该如何编写?4、 定义一个复数类,通过重载运算符: * , /,直接实现二个复数之间的乘除运算编写一个完整的程序,测试重载运算符的正确性要求乘法 “*用”友元函数实现重载,除法 “/用”成员函数实现重载七、思考与练习1、定义一个复数类,通过重载运算符: *,/ ,直接实现二个复数之间的乘除运算编写一个完整的程序,测试重载运算符的正确性要求乘法 “*用”友元函数实现重载,除法 “/用”成员函数实现重载2、定义包含年、月、日信息的日期类 Date,并重载二元运算符“ +”,使之具有日期对象和整数(天数)相加的功能,并编程测试3、下列程序定义了一实部为 real,虚部为 imag 的复数类 complex ,要求重载运算符 “ +”、 “ -”、“ * ”实现复数对象的加法、 减法、 乘法运算, 并编写测试程序 如果要进行 a = b + c * d;( a、 b、c、 d 都是类 Complex 的对象)这样的运算,需要重载赋值运算符吗?为什么?4class Complex{public:complex(double r=0, double i=0){real=r;imag=i;}private:double real, imag;};4、于下面的类 MyString ,要求重载一些运算符后可以计算表达式: a = b + c;,其中 a、b、c 都是类 MyString 的对象。
请重载相应的运算符并编写程序测试class MyString {public:MyString(char *s) {str = new char[strlen(s)+1];strcpy(str, s);}~MyString() {delete []str;}private:char *str;};5、对于下面的 Time 类:class Time {public:Time(int h = 0, int m = 0, int s = 0);private:int hour, minute, second;};要求:( 1) 实现构造函数,是类 Time 的数据成员可以得到正确的赋值;( 2)重载流插入运算符<< ,按照 hh:mm:ss 的格式输出类Time 的对象;( 3)重载流提取运算符>> ,按照 hh-mm-ss 的格式输入类Time 的对象5实验 3:通过继承进行软件的渐增式开发一、实验目的1。












