C++ 语言程序设计实验指南

99
1 揭揭揭 揭揭揭 E_mail: E_mail: [email protected] [email protected] QQ:461254151 QQ:461254151 揭揭揭揭揭揭揭揭揭揭揭揭揭 西 揭揭揭揭揭揭揭揭揭揭揭揭揭 西 揭揭揭揭揭揭揭揭 西 揭揭揭揭揭揭揭揭 西

description

江西师范大学精品课程. C++ 语言程序设计实验指南. 揭安全. E_mail: [email protected] QQ:461254151. 江西师范大学计算机信息工程学院. 江西师范大学精品课程. 1. 实验1 开发环境与简单C++程序设计. 2. 实验2 函数的应用. 3. 实验3 类与对象. 4. 实验4 C++程序的结构. 5. 实验5 数组、指针与实符串. 6. 实验6 继承与派生. 7. 实验7 多态性. 8. 实验8 群体类. 9. 实验9 输入输出流. 10. 实验10 异常处理. - PowerPoint PPT Presentation

Transcript of C++ 语言程序设计实验指南

Page 1: C++ 语言程序设计实验指南

1

揭安全揭安全E_mail: [email protected]_mail: [email protected]

QQ:461254151QQ:461254151

江西师范大学计算机信息工程学院江西师范大学计算机信息工程学院

江西师范大学精品课程江西师范大学精品课程

Page 2: C++ 语言程序设计实验指南

实验 1 开发环境与简单 C++ 程序设计

1

实验 2 函数的应用2

实验 3 类与对象3

实验 4 C++ 程序的结构4

实验 5 数组、指针与实符串5

实验 6 继承与派生6

实验 7 多态性7

实验 8 群体类8

实验 9 输入输出流9

实验 10 异常处理10

江西师范大学精品课程江西师范大学精品课程

Page 3: C++ 语言程序设计实验指南

3

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 4: C++ 语言程序设计实验指南

退出

实验任务实验任务

使用 visual c++ 来建立一个非图形化的标准c++ 程序,编译、运行以下程序:

#include<iostream . h> void main(void) {cout<<”Hello! \ n” ; cout<<”Welcome to c++! \ n” 。 )

Page 5: C++ 语言程序设计实验指南

退出

实验步骤实验步骤

1. 从“开始菜单中选择”程序” | Microsoft Visual Studio 6.0l MicrosofVisual c++6 . 0” ,显示 Visual C++6 . 0 开发环境窗口。

(1) 单击 File 菜单中的 New 选项,显示New( 新建 ) 对话框 ( 如图 1—1 所示 )

Page 6: C++ 语言程序设计实验指南

退出

图 1-1 New 对话框

Page 7: C++ 语言程序设计实验指南

退出

(2 )单击 Project( 项目 ) 标签,在 Project选项卡中,选择 Win32 Console Application(Win32 控制台应用程序 ) 。在Location( 位置 ) 文本框中指定一个路径,在Preject Name( 项目名称 ) 文本框中为项目输入一个名字 lab1_1, 单击 OK 按钮

Page 8: C++ 语言程序设计实验指南

退出

(3) 在弹出的 Win32 Console Application—Step 1 of 1 对话框中选择 An EmptyProject 单选项,然后单击 Finish( 完成 ) 按钮 ( 如图 1-2 所示 ).

Page 9: C++ 语言程序设计实验指南

退出

2 .建立 C++ 源程序文件 (1) 选择菜单命令 Project |Add to

Project |New ,弹出 New 对话框。 (2) 如图 1—3 所示,在 New 对话框的 Files

选项卡中选择 C++Source File ,并填人文件名称 labl—1 ,单击 OK 按钮,完成新建 C++源程序文件。

Page 10: C++ 语言程序设计实验指南

退出

图 1—3添加新的源程序文件

Page 11: C++ 语言程序设计实验指南

退出

3 .编辑 C++ 源程序文件内容 (1) 在文件编辑窗口中输入代码 ( 如图 l 一 4

所示 ) 。 (2) 选择菜单命令 File fSave 保存这个文件。 4 .建立并运行可执行程序

Page 12: C++ 语言程序设计实验指南

退出

(1) 选择菜单命令 Build lBuild labl—1 . exe ,建立可执行程序。

如果你正确输入了源程序,此时便成功地生成了可执行程序 1abl—1 . exe 。

如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息

程序进行修改后,重新选择菜单命令: Build I Build labl—1 . exe ,建立可执行程序。

(2) 选择菜单命令 Build i Execute 1abl 一1 . exe 运行程序,观察屏幕的显示内容。

6 .关闭工作空间

Page 13: C++ 语言程序设计实验指南

退出

实验任务实验任务

1 .输入并运行教材《 C++ 语言程序设计》中的例题 2—7 ,即:用 do—while 语句编程,求自然数 1 ~ 10之和。程序正确运行之后,去掉源程序中 #include 语句,重新编译,观察会有什么问题。

2 .将 do—while 语句用 for 语句代替,完成相同的功能。

3 .编程计算图形的面积。程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积的值后将其显示出来。

Page 14: C++ 语言程序设计实验指南

退出

4 .使用 debug 调试功能观察任务 3 程序运行中变量值的变化情况。

5 .定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。

Page 15: C++ 语言程序设计实验指南

退出

实验步骤实验步骤

1 .建立一个控制台应用程序项目 lab2—1 ,向其中添加一个 C++ 源文件 lab2—1 . cpp( 方法见实验 1) ,输入教材《 C++ 语言程序设计》中例 2—7 的代码,检查一下确认没有输入错误,选择菜单命令 Build | Build lab2—1 . exe编译源程序,再选择 Build | Execute 运行程序,观察输出是否与教材中的答案一致。

2 .程序正确运行之后,在源程序第一行“ #include<iostteam . h>” 前面加注释标记“∥”使之成为注释行,重新编译,此时,编译器会输出类似于下面内容的提示:

Page 16: C++ 语言程序设计实验指南

退出

Page 17: C++ 语言程序设计实验指南

退出

这是因为 C++ 语言本身没有输入/输出语句,只是 c++ 编译系统带有一个面向对象的 I / O 软件包,即 I / O 流类库。 cout 和 cin都是这个类库预定义的流对象, #include<iostream . h> 指示编译器在对程序进行预处理时,将头文件 iostream . h中的代码嵌入到该程序中该指令所在的地方,文件iostream . h 中声明了程序所需要的输入和输出操作的有关信息,在 C++ 程序中如果使用了系统中提供的一些功能,就必须嵌入相关的头文件,否则,系统无法找到实现这些功能的代码。

现在,删除注释标记,将程序恢复正确。

Page 18: C++ 语言程序设计实验指南

退出

3 .另建立一个项目 lab2—2 ,包含一个 C++ 源程序lab2—2 . cpp ,将 do—while 语句用 for 语句代替,完成与实验任务 1 相同的功能。

4 .建立项目 lab2—3 ,计算图形的面积。圆形的面积计算公式为 S—PI*r*r ,长方形的面积计算公式为 S—a*b ,正方形的面积计算公式为 S=a*a 。程序中定义一个整型变量 iType 表示图形的类型,用 cout 语句输出提示信息让用户选择图形的类型,用 cin读入 iType 的值,然后,使用 switch 语句判断图形的类型,分别提示用户输入需要的参数值,计算出面积的值后用 COUt 语句显示出来。最后,编译运行程序。

Page 19: C++ 语言程序设计实验指南

退出

5 .学习简单的 debug 调试功能,参考程序如下: // lab2—3 . cpp#include<iotarearrl . h>const float PI 一 3 . 1416void main(){ Int llype : float radius , a , b , area ;cout<<” 图形的类型为 ?(1 为圆形, 2 为长方形, 3 为正方形 ) :”;cin>>iType ;switch(iType){ case 1 : cout<<” 圆的半径为:”; cin>>radius ;

Page 20: C++ 语言程序设计实验指南

退出

area=PI*radius*radius ; cout<<” 面积为:” <<area<<endl ; break ; case 2 : cout<<”矩形的长为:”; cin>>a ; cout<<”矩形的宽为:”; tin>>b ; area=a*b : cout<<” 面积为:” <<area<<endl ; break : case 3 : cout<<” 正方形的边长为:”; ein>>a ; area=a*al

Page 21: C++ 语言程序设计实验指南

退出

cout<<” 面积为:” <<area<<endl ; break ; default : cout<<”不是合法的输入值 !”<<endl ; }

Page 22: C++ 语言程序设计实验指南

退出

一个程序,特别是大型程序,编写完成后往往会存在这样或那样的错误。有些错误在编译连接阶段可以由编译系统发现并指出 ( 如步骤 2 所示 ) ,称为语法错误。当修改完语法错误生成了可执行程序后,并不意味着程序已经正确。我们常常会发现程序运行的结果与我们预期的结果相去甚远,有时甚至在运行过程中程序中止或发生死机,这种错误称为运行错误,是因为算法设计不当或编程实现时的疏忽造成的。所谓调试就是指在发现了程序荐吞运行错误以后,寻找错误的原因和位置并排除错误。这一工作是非常困难的,对于初学者而言尤其如此。

Page 23: C++ 语言程序设计实验指南

退出

虽然编译系统不能像对待语法错误那样,明确指出运行错误的原因和位置,但大多数开发环境都为我们提供了辅助调试工具,可以实现单步运行、设置断点、观察变量和表达式的值等功能,使我们可以跟踪程序的执行流程,观察不同时刻变量值的变化状况。

Page 24: C++ 语言程序设计实验指南

退出

(1)首先在第 10 行处设置调试断点。用鼠标右键单击源程序第 10 行左边的空白处,出现一个菜单,如图 2—1 所示。

(2) 选择 Insert|Remove Breakpoint 选项,可看到左边的边框上出现了一个褐色的圆点,这代表已经在这里设置了一个断点。

所谓断点就是程序运行时的暂停点,程序运行到断点处便暂停,这样我们就可以观察程序的执行流程,以及执行到断点处时有关变量的值。

Page 25: C++ 语言程序设计实验指南

退出

(3) 然后选择菜单命令 Build|Start Debug | Go ,或按下快捷键 F5 ,系统进入 Debug( 调试 ) 状态,程序开始运行,一个 DOS 窗口出现,此时, Visual Studio 的外观如图 2—2 所示,程序暂停在断点处。

Page 26: C++ 语言程序设计实验指南

退出

Page 27: C++ 语言程序设计实验指南

退出

( 4) 单步执行:从 Debug 菜单或Debug 工具栏中单击 Step Over 选项或按钮两次。在程序运行的 DOS 窗口中输入选择的图形类型,例如,输入 3 ,代表正方形,这时, N 到 Visual Studio中,把鼠标放在变量名 iType上片刻,可看到出现了一个提示: iType 一 3 ;此时,在 Variables窗口中也可看到 iType 以及其他变量的值。

单步执行时每次执行一行语句,便于跟踪程序的执行流程。因此为了调试方便,需要单步执行的语句不要与其它语句写在一行中。

Page 28: C++ 语言程序设计实验指南

退出

( 5 )在 Wateh 窗口中,在 Name栏中输入iType ,按回车键,可看到 Value栏中出现 3 ,这是图 2-2变量 iType现在的值 ( 如果没看到 Variables窗口或Watch 窗口,可通过 View 菜单的Debug Windows 1 Variables 或 Debug Windows | Watch 选项打开它们 ) 。图 2—3是此时 Variables 窗口和 Watch 窗口的状态。

Page 29: C++ 语言程序设计实验指南

退出

Page 30: C++ 语言程序设计实验指南

退出

(6) 继续执行程序,参照上述的方法,再试试Debug 菜单栏中别的菜单项,熟悉 ( 调试 ) 状态,程序开始运行,一个 DOS 窗口出现,此时,Visual Studio 的外观如图 2—2 所示,程序暂停在断点处。

Page 31: C++ 语言程序设计实验指南

退出

Page 32: C++ 语言程序设计实验指南

退出

6 .建立一个项目 lab2—4 ,包含一个 C++ 源程序 lab2_4 . cpp 。定义一个表示时间的结构体,有表示年、月、日、小时、分、秒的成员,可以使用 short 类型;在主程序中实现输入输出。

Page 33: C++ 语言程序设计实验指南

33

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 34: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .掌握函数的定义和调用方法。 2 .练习重载函数的使用。 3 .练习函数模板的使用。 4 .练习使用系统函数。 5 .学习使用 VC++ 的 debug 调试功能,使用

step into追踪到函数内部。

Page 35: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .编写一个函数把华氏温度转换为摄氏温度,转换公式为.. C=(F 一 32)*5 / 9 。

2 .编写重载函数 Maxl 可分别求取两个整数,三个整数,两个双精度数,三个双精度

数的最大值。 3 .使用重载函数模板重新实现上小题中的函

数 Maxl 。 4 .使用系统函数 pow(X , y) 计算芷的值,

注意包含头文件 math·h 。 5 .用递归的方法编写函数求 Fibonacci级

数,观察递归调用的过程。

Page 36: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤 1 .编写函数 float Convert(float

TempFer) ,参数和返回值都为 float 类型,实现算法 C=(F 一 32)*5 / 9 ,在 main() 函数中实现输入、输出。程序名: lab3_1.cpp 。

2 .分别编写四个同名函数 maxl ,实现函数重载,在 main() 函数中测试函数功能。程序名:lab3_2 . cpp 。

3 .使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板maxl ,其参数个数不同,实现函数重载,在main() 函数中测试函数功能。程序名:lab3_3 . cpp 。

Page 37: C++ 语言程序设计实验指南

退出

4 .在 main() 函数中提示输入两个整数x 、 y ,使用 cin 语句得到 x 、 y 的值,调用pow(x , y) 函数计算 x 的 Y次幂的结果,再显示出来。程序名. 1ab3_4.cpp 。

5 .编写递归函数 int fib(int n) ,在主程序中输入 n 的值,调用 fib 函数计算 Fibonacci级数。公式为 fib(n)=fib(n 一 1)+fib(n 一2) , n>2 ; fib(1)=fib(2)=1 。使用 if 语句判断函数的出口,在程序中用 cout 语句输出提示信息。程序名: lab3_5 . cpp 。

6 .使用 debug 中的 Step Into追踪到函数内部,观察函数的调用过程,参考程序如下:

三、实验步骤三、实验步骤

Page 38: C++ 语言程序设计实验指南

退出

// lab3_5 #include<iosrream . h> int fib(int n) ; int main() { int n , answer ; cout<<”Enter number”; cin>>n ; cout<<”\ nkn” ; answer=fib(n) ;

三、实验步骤三、实验步骤

Page 39: C++ 语言程序设计实验指南

退出

cout<<answer<<”is the”<<n<<”th Fibonacci number\ n”;

return 0 ; }int fib(int , n){ cout<<”vProcessing fib(”<<n<<”)…”; if(n<3) { cout<<”Return 1!\ n” ; return(1) ; }

三、实验步骤三、实验步骤

Page 40: C++ 语言程序设计实验指南

退出

else{cout<<”ca11 fib(“<<n-2<<”)and fib(“<<n-1<<”) .\ n”;}

return(fib(n-2)+fib(n-1)); }

三、实验步骤三、实验步骤

Page 41: C++ 语言程序设计实验指南

退出

7. 调试操作步骤如下: (1) 选择菜单命令 Build | Start Debug | Step

in ,或按下快捷键 Fll ,系统进入单步执行状态,程序开始运行,并出现一个 DOS 窗口,此时 Visual Studio 中光标停在 main() 函数的入口处。

(2)把光标移到语句 answer=fib(n) 前,从Debug 菜单或Debug 工具栏中单击 Runto Cursor ,在程序运行的 DOS 窗口中按提示输入数字10 ,这时回到 Visual Studio 中,光标停在第 11 行,观察一下 n 的值 ( 观察方法见实验 2) 。

三、实验步骤三、实验步骤

Page 42: C++ 语言程序设计实验指南

退出

(3) 从 Debug 菜单或Debug 工具栏中单击 Step Into ,程序进入 fib 函数,观察一下 n 的值栏中单击Step Into, 程序进入 fib 函数,观察一下 n 的值,把光标移到语句 return(fib(n-2)+fib(n-1)) 前,从Debug 菜单或Debug 工具栏中单击 Run to Cursor ,再单击 Step Into ,程序递归调用 fib 函数,又进入 fib 函数,观察一下 n 的值。

(4) 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。

(5) 再试试 Debug 菜单栏中别的菜单项,熟悉Debug 的各种方法。

三、实验步骤三、实验步骤

Page 43: C++ 语言程序设计实验指南

43

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 44: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .掌握类的窟义和使用。 2 .掌握类的定义和对象的声明。 3 .复习具有不同访问属性的成员的访问方式。 4 .观察构造函数和析构函数的执行过程。 5 .学习类的聚集使用方法。 6 .使用 VC++ 的 debug 调试功能观察程

序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

Page 45: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务 1 .定义一个 CPU 类,包含等级 (rank) 、频率

(freqlaency) 、电压 (voltage)等属性,有两个公有成员函数 run 、 stop 。其中, rank 为枚举类型 CPU—Rank ,定义为 enum CPU—Rank{Pl=1 , P2 , P3 , P4 , P5 , P6 , P7} ,frequency 为单位是 MHz 的整型数, voltage 为浮点型的电压值。观察构造函数和析构函数的调用顺序。

2. 定义一个简单的 (Computer 类,有数据成员芯片(cpu) 、内存 (ram) 、光驱 (cdrom)等等,有两个公有成员函数 run 、 stop 。 cpu 为 CPU 类的一个对象, ram 为 RAM 类的一个对象, edrom 为 CDROM类的一个对象,定义并实现这个类。

Page 46: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

3 . ( 选做 ) 设计一个用于人事管理的 People( 人员 )类。考虑到通用性,这里只抽象出所有类型人员都具有的属性: numbel( 编号 ) 、 sex( 性别 ) 、 birthday( 出生日期 ) 、 id( 身份证号 )等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

Page 47: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .首先定义枚举类型 CPU_Rank ,例如 enum CPU_Rank{P1 :1 , P2 , P3 , P4 , P5 , P6 , P7} ,再定义CPU 类,包含等级 (rank) 、频率 (frequency) 、电压 (voltage)等私有数据成员,定义成员函数run 、 stop ,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个 CPU 的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名: lab4_1 . cpp 。

2 .使用 debug 调试功能观察程序 lab4_1 . cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下:

Page 48: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤 //lab4_1 . cpp #include<iostream . h> enum CPU_Rank{P1=1 , P2 , P3 , P4 , P5 , P6 , P7} ; class CPU ( private : CPU_Rank rank ; int frequency ; float voltage ; public : CPU(CPU_Rank r , int f , float v) { rank=r ; frequency=f ; voltage=v : cout<<” 构造了一个 CPU!”<<endl ; }

Page 49: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤 ~ CPU(){cout<<”析构了一个 CPU!”<<endl ; }

CPU_Rank GetRank()const{return rank ; }int GetFrequency()const{return frequency ; }float GetVoltage()const{return voltage ; }void SetRank(CPU_Rank r){rank=r ; }void SetFrequency(int f){frequency=f ; }void SetVoltage(float v){voltage=v ; }void Run(){cout<<”CPU 开始运行 !”<<endl ; }void Stop(){COUI<<”CPU停止运行 !”<<endl ; }

void main() { CPU a(P6 , 300 , 2 . 8) ; a.Run() ;

a.Stop() ; }

Page 50: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

3 .调试操作步骤如下: (1) 单击 Build l Start Debug | Step Into 命

令,或按下快捷键 Fll ,系统进入单步执行状态,程序开始运行,一个 DOS 窗口出现,此时 Visual Studio 中光标停在 main() 函数的入口处;

(2) 从 Debug 菜单或Debug 工具栏中单击Stupe Over .此时 ,光标下移 , 程序准备执行 CPU 对象的初始化;

(3) 单击 Step Into ,程序准备执行 CPU 类的构造函数;

(4)连续单击 Step Over ,观察构造函数的执行情况.直到执行完构造函数,程序回到主函数;

Page 51: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

(5) 此时程序准备执行 CPU 对象的 run() 函数.单击Step Into ,程序进入 run() 成员函数,连续单击Step Over ,直到回到main() 函数;

(6) 继续执行程序,参照上述的方法.观察程序执行顺序.加深对类的构造函数、析构函数、成员函数的执行顺序的认识;

(7) 再试试 Debug 菜单栏中别的菜单项,熟悉Dehug的各种方法。

Page 52: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

4 .首先定义 CPU 类 ( 可使用第 2 题。可使用 2 题中的 CPU 类 ) 、 RAM 类、 CDROM 类。再定义Computer 类:定义私有数据成员cpu 、 ranl 、 cdrom .定义公订成员函数run 、 stop ,可在其中输出提示信息。在主程序中定义一个 Computer 的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序.以及成员函数的调用.程序名: lab4_2 . cpp 。

5 .使用 debug 调试功能观察 lab4_2 . cpp 程序的运行流程.跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。

Page 53: C++ 语言程序设计实验指南

53

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 54: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .观察程序运行中变量的作用域、生存期和 ,可见性。

2 .学习类的静态成员的使用。 3 .学习多文件结构在 C++ 程序中的使用。

Page 55: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .运行下面的程序,观察变量 x 、 y 的值。#lab5-1.cpp#include<iostream.h>void fnl();int x=1,y=2;int x=1,y=2; #include<iostream.h>int main(){ cout<<"Begin ... "<<endl; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; cout<<"Evaluate x and y in main()…"<<endl;

Page 56: C++ 语言程序设计实验指南

退出

int x=10,y=20; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; cout<<"Step into fnl()…"<<endl; fnl(); cout<<"Back in main"<<endl; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; return 0;}

Page 57: C++ 语言程序设计实验指南

退出

void fnl(){ int y=200;

cout <<"x="<<x<<endl; cout<<"y="<<y<<endl;}

Page 58: C++ 语言程序设计实验指南

退出

2 .实现客户机 (CLIENT) 类。定义字符型静态数据成员 ServerName 。保存其服务器名称;整型静态数据成员 (ClientNum ,记录已定义的客户数量;定义静态函数ChangeServerName() 改变服务器名称。在头文件 client . h 中定义类,在文件(client . Cpp) 实现.在文件 test . cpp 中测试这个类,观察相应的成员变量取值的变化情况。

Page 59: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .运行 lab5-1 程序.观察程序输出。 全局变量的作用域为文件作用域,在整个程序运行期间有效,但如果在局部模块中定义同名的变量,则在局部中,可见的是局部变量,此时,全局变量不可风;而局部变量的生存存期只限于相应的程序模块中,离开相应的程序模块,局部变量 x 、 y就不再存在,此时同名的局变量重新可见。

2 .新建一个空的项门 lab5-2, 添加头文件cliellf.h ,在其中定义类 CLIENT ,注意使用编译预处理命令;再添加源程序文件 client.cpp ,在其中实现(CLIENT 类,注意静态成员变量的使用方法;再添加文件 lab5-2.cpp ,在其中定义 main() 函数,测试CLIENT 类,观察相应的成变量取值的变化情况。

Page 60: C++ 语言程序设计实验指南

60

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 61: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的 1 .学习使用数组。 2 .学习字符串数据的组织和处理。 3 .学习标准 C++库的使用。 4 .掌握指针的使用方法。 5 .练习通过 debug 观察指针的内容及其所指的

对象的内容。 6 .练习通过动态内存分配实现动态数组,并体会

指针在其中的作用。 7 .分别使用字符数组和标准 C++库练习处理字

符串的方法。

Page 62: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .编写并测试 3x 3矩阵转置函数,使用数组保存3×3矩阵。

2 .使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。

3 .编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。

4 .使用 string 类定义字符串对象,重新实现上一小题。 5 .定义一个 Employee 类,其中包括姓名、街道地址、城市和邮编等属性,以及 change—name() 和display()等函数。 display() 显示姓名、街道地址、城市和邮编等属性, change—name() 改变对象的姓名属性。实现并测试这个类。

6 .定义包含 5 个元素的对象数组,每个元素都是Employee 类型的对象。

Page 63: C++ 语言程序设计实验指南

退出

7 . ( 选做 ) 修改实验 4 中的选做实验中的people( 人员 ) 类。具有的属性如下:姓名 char name[11] 、编号 char number[7] 、性别 char sex[3] 、生日 birthday 、身份证号 char id[16] 。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录人和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义 people 类的对象数组,录入数据并显示。

二、实验任务二、实验任务

Page 64: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .编写矩阵转置函数,输人参数为 3×3 整型数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main() 函数实现输入、输出。程序名: lab6—1 . cpp 。

2 .改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在 main() 函数中使用 new操作符分配内存生成动态数组。通过 debug 观察指针的内容及其所指的对象中的内容。程序名: lab6—2 . cpp 。

3 .编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用 cout 语句显示输出。程序名: lab6—3 . cpp 。用 cin 实现输入,注意,字符串的结束标志是ASClI 码 0 ,使用循环语句进行字符串间的字符拷贝。

Page 65: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

4 .使用 string 类定义字符串对象,编程实现两字符串的连接。在 string 类中已重载了运算符“ + :”实现字符串的连接,可以使用这个功能。程序名: lab6—4 . cpp 。

Page 66: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

5 .在 employee . h 文件中定义 Employee类。 Employee 类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char* , char*name) ; display()中使用 cout 显示姓名、街道地址、城市和邮编等属性, change—name() 改变类中表示姓名属性的字符数组类型的数据成员。在主程序中定义这个类的对象并对其进行操作。程序名: lab6—5 . cpp 。

Page 67: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

6 .使用上一小题中定义的 Employee 类定义对象数组 emp[5] ,使用循环语句把数据显示出来。程序名: 1ab6—6 . cpp 。

Page 68: C++ 语言程序设计实验指南

68

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 69: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .学习定义和使用类的继承关系,定义派生类。 2 .熟悉不同继承方式下对基类成员的访问控制。 3 .学习利用虚基类解决二义性问题。

Page 70: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .定义一个基类 Animal ,有私有整型成员变量age ,构造其派生类 dog ,在其成员函数 SetAge(int n) 中直接给 age赋值,看看会有什么问题,把 age 改为公有成员变量,还会有问题吗 ? 编程试试看。

2 .定义一个基类 BaseClass ,有整型成员变量Number ,构造其派生类 DerivedClass ,观察构造函数和析构函数的执行情况。

Page 71: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

3 .定义一个车 (vehicle)基类,具有 MaxSpeed 、Weight等成员变量, Run 、 Stop等成员函数,由此派生出自行车 (bicycle) 类、汽车 (motorcar) 类。自行车 (bicycle) 类有高度 (Height)等属性,汽车(motorcar) 类有座位数 (SeatNum)等属性。从bicycle 和 motorcar 派生出摩托车 (motorcycle)类,在继承过程中,注意把 vehicle 设置为虚基类。如果不把 vehicle 设置为虚基类,会有什么问题 ? 编程试试看。

Page 72: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

4 . ( 选做 ) 从实验 6 中的 people( 人员 ) 类派生出student(学生 ) 类,添加属性:班号 char classNO[7] ;从 people 类派生出 teacher( 教师 ) 类,添加属性:职务char principalship[11] 、部门 char department[21] 。从 student 类中派生出graduate(研究生 ) 类,添加属性:专业 char subject[21] 、导师 teacher adviser ;从 graduate 类和 teacher 类派生出 TA(助教生 ) 类,注意虚基类的使用。重载相应的成员函数,测试这些类。类之间的关系如图 7—1所示。

Page 73: C++ 语言程序设计实验指南

退出

图 7-1 实验任务 4 的类图

二、实验任务二、实验任务

Page 74: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .编写程序定义基类 Animal ,成员变量 age 定义为私有的。构造派生类 dog ,在其成员函数SetAge(int n) 中直接对 age赋值时,会出现类似以下的错误提示:

error C2248 :’ age’ : cannot access private member declared in class’Animal’

error C2248 :’ age’ : cannot access private member declared in class’Animal’

把 age 改为公有成员变量后重新编译就可以了。程序名:lab7—1 . cpp 。

2 .编写程序定义一个基类 BaseClass ,构造其派生类 DerivedClass ,在构造函数和析构函数中用cout 输出提示信息,观察构造函数和析构函数的执行情况。程序名: lab7—2 . cpp 。

Page 75: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

3 .用 debug 功能跟踪程序 lab7—2 的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

4 .编写程序定义一个车 (vehicle)基类,由此派生出自行车 (bicycle) 类、汽车 (motorcar) 类,注意把vehicle 派生为虚基类。再从 bicycle 和 motorcar 派生出摩托车 (motorcycle) 类,在 main() 函数中测试这个类。程序名: lab7—3 . cpp 。

编译成功后,把 vehicle 设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle 设置为虚基类,会出现二义性错误,程序不能成功编译。

Page 76: C++ 语言程序设计实验指南

76

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 77: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .掌握运算符重载的方法。 2 .学习使用虚函数实现动态多态性。

Page 78: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .定义 Point 类,有坐标一 x ,一 y两个成员变量;对 Point 类重载“ ++”( 自增 ) 、“一一” ( 自减 ) 运算符,实现对坐标值的改变。

2 .定义一个车 (vehicle)基类,有 Run 、 Stop等成员函数,由此派生出自行车 (bicycle) 类、汽车(motorcar) 类,从 bicycle 和 motorcar 派生出摩托车 (motorcycle) 类,它们都有 Run 、 Stop等成员函数。观察虚函数的作用。

3 . ( 选做 ) 对实验六中的 people 类重载“一一”运算符和“:”运算符,“: =” 运算符判断两个people 类对象的 id属性是否相等;“ =” 运算符实现people 类对象的赋值操作。

Page 79: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .编写程序定义 Point 类,在类中定义整型的私有成员变量一 x 、一 Y ,定义成员函数 Point8L operator++() ; Point operator++(int) ;以实现对 Point 类重载“ ++”( 自增 ) 运算符,定义成员函数 Point&operator 一一 () ; Point operator 一一(int) ;以实现对 Point 类重载“一一” ( 自减 ) 运算符,实现对坐标值的改变。程序名: lab8—1 . cpp 。

Page 80: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

2 .编写程序定义一个车 (vehicle)基类,有Run 、 Stop等成员函数,由此派生出自行车(bicycle) 类、汽车 (motorcar) 类,从 bicycle 和motorcar 派生出摩托车 (motorcycle) 类,它们都有Run 、 Stop等成员函数。在 main() 函数中定义vehicle 、 bicycle 、 motorcar 、 motorcycle 的对象,调用其 Run() 、 Stop() 函数,观察其执行情况。再分别用 vehicle 类型的指针来调用这几个对象的成员函数,看看能否成功;把Run 、 Stop 定义为虚函数,再试试看。程序名: lab8_2 . cpp 。

Page 81: C++ 语言程序设计实验指南

81

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 82: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .了解链表类的定义与实现,学习其使用方法。

2 .了解栈类的定义与实现,学习其使用方法。

3 .了解队列类的定义与实现,学习其使用方法。

4 .了解C++ 标准模板库 STL 的使用方法。

Page 83: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .编写程序 link . h ,实现教材中例 9—6 的链表类。在测试程序 lab9—1 . cpp 中定义两个整型链表 A 和 B ,分别插入 5 个元素,然后把B 中的元素加入 A 的尾部。

2 .编写程序 queue . h ,用链表实现队列(或栈 ) 类。在测试程序 lab9—2 . cpp 中定义一个整型队列 (或栈 ) 对象,插入 5 个整数,压人队列 (或栈 ) ,再依次取出并显示出来。

3 .使用 C++ 标准模板库 (STL) 中的双向队列类 (deque) 重新实现上一小题。

Page 84: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

4 . ( 选做 ) 定义 COtlrse(课程 ) 类,有属性:课程名 char name[21] 、成绩 slaort SCOt-e ;在实验 7 中的 student 类中增加属性:所修课程courses ,为课程类对象的链表。在测试程序中测试这个类。学生类与课程类关系如图 9—1 所示。

Page 85: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .参照教材《C++ 语言程序设计》中链表类 LinkeclI 。 ist 的定义 ( 教材中的例程 9—6 . h) ,给出其实现,注意合理使用 NodIe 类( 教材中的例程 9—3 . h) 的成员函数。在测试程序中定义整型链表 A 和 B ,分别插入 5 个元素,使用循环语句显示链表中的元素,然后把B中的元素加入 A 的尾部,再显示出来。

Page 86: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

2 .队列类的特点就是其元素的操作顺序为先入先出( FIFO ),用上题中的链表类实现队列类,用链表类的成员函数实现队列的成员函数,在测试程序中定义一个整型队列对象,观察队列类中的元素先入先出的特点。

3 .在程序中包含语句 #include <deque>,使用 deque 类的方法push_back() 、 empty() 、 pop_front() 完成上一小题的要求。程序名: lab9_3.cpp 。

Page 87: C++ 语言程序设计实验指南

87

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 88: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .熟悉流类库中常用的类及其成员函数的用法。 2 .学习标准输入输出及格式控制。 3 .学习对文件的应用方法 (二进制文件、文本

文件 ) 。

Page 89: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

1 .观察以下程序的输出,注意对输出格式的控制方法;

//labll—1 . cpp#include<fstream>Using namespace std;#define D(a)<<#a<<endl ; aofstream T("output . out”) 。void main(){D(int i=53 ; )D(float f=4700113 . 141593 ; )Char*S=”Is there any more?”;

Page 90: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务D(T . setf(ios :: unitbuf) ; )D(T . setf(ios :: showbase) ; )D(T . setf(ios :: uppercase) ; )D(T . setf(ios :: showpos) ; )D(T<<i<<endl ; )D(T . setf(ios :: hex , iOS :: basefield) ; )D(T<<i<<endl ; )D(T . unsetf(ios :: uppercase) ; )D(T . setf(ios :: oct , iOS :: basefield) ; )D(T<<i<<endl ; )D(T . unsetf(ios :: showbase) ; )D(T . setf(ios :: dec , iOS :: basefield) ; )D(T . serf(ios :: 1eft , iOS :: adjustfield) ; )D(T.fill(’O’) ; )

Page 91: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务D(T<<”fill char ”: <<T.fill()<<endl ; )D(T.width(8) ; )T<<i<<endl ;D(T.setf(ios :: right , ios :: adjustfield) ; )D(T.width(8) ; )T<<i<<endl ;D(T.setf(ios :: internal , ios :: adjustfield) ; )D(T.width(8) ; )T<<i<<endl ;D(T<<i<<endl ; ) Without width(1 O)∥D(T.unsetf(ios::showpos) ; )D(T.serf(ios::showpoint) ; )D(T<<”prec=”<<T.precision()<<endl ; )

Page 92: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务D(T.setf(ios :: scientific , iOS :: floatfield) ; )D(T<<endl<<f<<endl ; )D(T.setf(ios :: fixed , iOS :: floatfield) ; )D(T<<f<<endl ; )D(T.setf(0 , iOS :: floatfield) ; ) Automatic∥D(T<<f<<endl ; )D(T . precision(1 6) ; )D(T<<”prec=”<<T . precision()<<endl ; )D(T<<endl<<f<<endl ; )D(T . setf(ios :: scientific , iOS :: floatfield) ; )D(T<<endl<<f<<endl ; )D(T . setf(ios :: fixed , iOS :: floatfield) ; )

Page 93: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务D(T<<f<<endl ; )D(T . setf(0 , iOS :: floatfield) ; ) Automatic∥D(T<<f<<endl ; )D(T . width(8) ; )T<<s<<endl ;D(T . width(3 6) ; )T<<s<<endl ;D(T . setf(ios :: 1eft , iOS :: adjustfield) ; )D(T . width(36) ; )T<<s<<endl ;D(T . unsetf(ios :: showpoint) ; )D(T . unsetf(ios :: unitbuf) ; )

Page 94: C++ 语言程序设计实验指南

退出

2 .编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。

3 . ( 选做 ) 使用实验 1 0 中的学生类数组,输入数据并显示出来,使用 I / O 流把此数组的内容写入磁盘文件,再显示出文件内容。

二、实验任务二、实验任务

Page 95: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

1 .观察题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;

2 .编写程序 labll_2 . cpp 。使用 void main(int argc , char * argv[]) 函数中的参数传递操作的文件名,定义 ofstream 的对象对文件进行操作,使用 getline 成员函数读人数据,使用 cout 输出字符到文件。

Page 96: C++ 语言程序设计实验指南

96

江西师范大学精品课程 江西师范大学精品课程 C++C++ 语言程序设计语言程序设计

Page 97: C++ 语言程序设计实验指南

退出

一、实验目的一、实验目的

1 .正确理解C++ 的异常处理机制。 2 .学习异常处理的定义和执行过程。

Page 98: C++ 语言程序设计实验指南

退出

二、实验任务二、实验任务

定义一个异常类 CException ,有成员函数Reason() ,用来显示异常的类型。在子函数中触发异常,在主程序中处理异常,观察程序的执行流程。

Page 99: C++ 语言程序设计实验指南

退出

三、实验步骤三、实验步骤

编写程序 labl2_1 . cpp 。在 CException类的成员函数 Reason() 中用 cout 显示异常的类型,在函数 fnl() 中用 throw 语句触发异常,在主函数的 try模块中调用 fnl() ,在 catch模块中捕获异常。