2022年面向对象程序设计 .pdf
1 / 12 面向对象程序设计实验指导书实验类别:设计实验课程名称:面向对象程序设计方法学实验室名称:软件基础实验室实验课程编号:总学时: 56 学分:3.5 适用专业:计算机科学与技术、网络工程、物联网先修课程:有一门程序设计语言基础实验在教案培养计划中地位、作用:面向对象程序设计方法学是一门实践性很强的课程,每个学生必须完成一定数量的上机实验。实验课是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教案环节。本课程使学生熟悉C+的语法特性,了解C 与 C+的区别和兼容性;理解面向对象程序设计的基本原理,包括类、对象、抽象、封装、继承和多态性等关键要素以及其关键语法特性类;掌握用C+编写面向对象程序的一般方法;了解VC+编程环境。通过上机实验进一步加深对课程基本内容的理解。同时,在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 12 页2 / 12 实验一语句与程序流程(2 学时)1、实验目的(1)了解 C+开发工具的特点(2)熟悉 C+开发环境(3)学会编写简单的C+程序。(4)练习使用简单的输入输出。(5)熟悉各种流程控制语句的功能。2、实验内容(1)输入并运行程序:用do-while 语句编程,求自然数110 之和。程序正确运行之后,去掉源程序中的#include 语句,重新编译,观察会有什么问题。(2)do-while 语句用 for 语句代替,完成相同的功能。(3)编程计算图形的面积。程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积后将其显示出来。3、实验要求(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。(2)独立完成所布置习题。(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。(4)认真完成每次实验,并写出实验报告。4、实验步骤(1)启动 Visual C+ 开发环境(2)创建一个工程1)单击 File 菜单中的 New 选项,显示新建对话框2)选择 Win32 Console Application(VC+)。3)选择工程所在路径及输入工程的名称lab1_1 4)依次按下一步直至完成为止。(3)至此,已经建立好工程相关的文件,在生成的main 函数中写入必要的内容即可。(4)输入并运行程序:用do-while 语句编程,求自然数110 之和1)建立 C+源程序文件选菜单命令Project|Add to Project|New, 弹出 New 对话框在 New 对话框的Files 选项卡中选择C+ Source File,并填入文件名称lab1_1,单击 OK 按钮,完成新建C+源程序文件2)编辑 C+源程序文件在文件编辑窗口中输入代码完成后,选择菜单File|Save保存这个文件3)建立并运行可执行程序选择菜单命令Build, 建立可执行程序如果你正确输入了源程序,此时便成功地生成了可执行程序。如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build 建立可执行程序。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 12 页3 / 12 选择菜单命令Run,运行程序,观察屏幕显示内容。(5)程序正确运行之后,在源程序第一行”#include ”前面加注释标记”/”使之成为注释行,重新编译,观察编译的结果。(6)选择菜单命令File|Colse WorkSpace 关闭工作空间,另建立一个工程lab1_2,包含一个 C+源程序 lab1_2.cpp,将 do-while 语句用 for 语句代替,完成与实验内容1 相同的功能。(7)选择菜单命令File|Colse WorkSpace 关闭工作空间,建立工程lab1_3,包含一个C+源程序lab1_3.cpp,计算图形面积。圆形的面积计算公式为S=PI*r*r ,长方形的面积计算公式为S=a*b,正方形的面积市场计算公式为S=a*a。程序中定义一个整型变量iType 表示图形的类型,用cout 语句输出提示信息让用户选择图形的型,用cin 读入 iType 的值,然后,使用switch 语句判断图形的类型,分别提示用户输入需要的参数值,计算出面积的值后用 cout 语句显示出来。最后编译运行程序。参考程序如下: /lab3_3.cpp #include using namespace std。const float PI=3.1416 。int main() int iType。 float radius,a,b,area。coutiType 。 switch(iType) case 1: cout radius。area=PI*radius*radius 。cout”面积为” areaendl。break。 case 2: couta。coutb。area=a*b。cout”面积为:” areaendl。break。 case 3: couta。area=a*a。cout”面积为:” areaendl。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 12 页4 / 12 break。 default: cout”不是合法的输入值!”endl 。 return 0。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 12 页5 / 12 实验二函数与重载(2 学时)1、实验目的(1)掌握函数的定义和调用方法。(2)练习重载函数使用。(3)练习缺省参数的函数使用(4)练习使用系统函数。2、实验内容:(1)编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9 。(2)编写重载函数max1 可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。(3)给求取两个整数最大值的重载函数max1 赋缺省参数值0,并利用该函数来判断某个整数是否大于0,比如 max1(-6)。(4)使用系统函数pow(x,y) 计算 xy 的值,注意包含头文件cmath。3、实验要求(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。(2)独立完成所布置习题。(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。(4)认真完成每次实验,并写出实验报告。4、实验步骤:(1)编写函数float Convert(float TempFer),参数的返回值都为float 类型,实现算法C=(F-32)*5/9 ,在 main()函数中实现输入、输出。程序名为lab2_1.cpp. (2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。程序名: lab2_2.cpp。参考程序如下:#include using namespace std。int max1(int a=0,int b=0) return ab?a:b。 int max1(int a,int b,int c) int tmp=max1(a,b) 。return tmpc?tmp:c 。 double max1(double a,double b) return ab?a:b。 double max1(double a,double b,double c) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 12 页6 / 12 double tmp=max1(a,b) 。return tmpc?tmp:c 。 int main() int n1,n2,n3。coutn1。if (max1(n1)=0) cout 这个数小于或等于0。else cout 这个数大于0。coutn1n2 。cout 最大值为 max1(n1,n2)endl 。coutn1n2n3 。cout 最大值为 max1(n1,n2,n3)endl 。double d1,d2,d3。coutd1d2 。cout 最大值为 max1(d1,d2)endl 。coutd1d2d3 。cout 最大值为 max1(d1,d2,d3)endl 。 return 0。 (3)若将三个整数的函数给定缺省参数值0,重新编译,观察编译的结果。( 4)在main() 函数中提示输入两个整数x,y,使用cin 语句得到x,y 的值,调用pow(x,y) 函数计算x 的 y 次幂的结果,再显示出来。程序名:lab2_2.cpp。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 12 页7 / 12 实验三类的定义与使用(2 学时)1、 实验目的(1)掌握类的定义和使用(2)掌握类的定义和对象的声明(3)观察构造函数和析构函数的执行过程。(4)观察具有不同访问属性的成员的访问方式。2、实验内容(1)定义一个TDate 类,包含年 (year)、月 (month)、日 (day)等属性,有三个公有成员函数: SetDate来设置日期、AddOneDay 来对日期进行加1 天的操作、 print 来输出日期;(2)对构造函数或成员函数进行重载;(3)设置构造函数或成员函数的缺省参数(4)观察构造函数和析构函数的调用顺序;(5)观察具有不同访问属性的成员的访问方式。3、实验要求(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。(2)独立完成所布置习题。(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。(4)认真完成每次实验,并写出实验报告。4、实验步骤(1)添加一个头文件TDate.h 来定义 TDate 类。包含:1)私有数据成员:年(year)、月 (month)、日 (day)等;2)定义 2 个构造函数,并对其中的一个构造函数设置缺省参数;3)定义 1 个析构函数。4)定义成员函数SetDate来设置日期,AddOneDay 来对日期进行加1 天的操作,print 来输出日期。(2)添加一个源文件TDate.cpp 来实现成员函数。(3)在主程序中定义若干个TDate 类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。写在另外一个cpp 文件中。(4)将成员函数print 的访问属性设为private 或 protected 后,重新编译,观察编译结果。/= 日期类定义部分TDate.h=/ #include using namespace std。#ifndef TDate_H #define TDate_H class TDate public: TDate() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 12 页8 / 12 year=2018。month=1。 day=1。cout 调用缺省的构造函数endl 。 TDate(int y,int m=1,int d=1) year=y。month=m 。day=d。cout 调用带参数的构造函数endl 。void SetDate(int y,int m,int d) 。void AddOneDay() 。void print() 。TDate()cout 调用析构函数 endl 。 private: int year。int month 。int day。#endif /= 日期类实现部分TDate.cpp =/ #include TDate.h int maxDays(int,int) 。void TDate:print() coutyear 年month 月 day 日maxDays(year,month) month=month+1 。day=1。 if (month12) year=year+1 。month=1。 int maxDays(int y,int m) int days。switch(m) case 1: case 3: case 5: case 7: case 8: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 12 页9 / 12 case 10: case 12: days=31。 /31 天break。case 2: if (y%4=0&y%100!=0)|y%400=0)/闰年 29 天days=29。else days=28。break。/ default:/30 天days=30。break。 return days。/= 主函数部分Lab3.cpp =/ int main() TDate d0。cout 不带参数的日期对象:。d0.print() 。TDate d1(2003) 。cout 带 1 个参数的日期对象:。d1.print() 。TDate d2(2003,12) 。cout 带 2 个参数的日期对象:。d2.print() 。TDate d3(2018,10,14) 。d3.AddOneDay() 。cout 带 3 个参数的日期对象加一天后:。d3.print() 。d3.SetDate(2005,4,8)。cout 重新设定日期后:。d3.print() 。return 0。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 12 页10 / 12 实验四静态成员与常成员的使用(2 学时)1、 实验目的(1)学习静态成员的使用(2)学习常成员的使用(3)掌握静态数据成员与常数据成员的初始化2、实验内容(1)某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现在要求设计一个Goods 类并使用静态成员来模拟商店货物购进和卖出的情况;(2)为上面的Goods 类添加一个常数据成员(货物名称),并对货物名称进行初始化;(3)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。3、实验要求(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。(2)独立完成所布置习题。(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。(4)认真完成每次实验,并写出实验报告。4、实验步骤(1)添加一个头文件Goods.h 来定义 Goods类。包含:1)私有数据成员货物重量(weight) 、私有静态数据成员库存总重量(totalWeight) ;2)定义构造函数来描述进货过程;3)定义成员函数Sell 来描述货物卖出过程,成员函数GetWeight 来获取当前货物重量。4)定义静态成员函数GetTotalWeight 来读取当前货物的库存总重量。5)自定义若干个成员函数。(2)添加一个源文件Goods.cpp 来实现成员函数。(3)在主程序中定义若干个Goods 类的对象,模拟进货与卖出的过程。查看运行结果。(4)为 Goods 类添加一个常数据成员const char * name 来表示货物名称,改写构造函数及主程序的调用,在构造函数的成员初始化列表中对货物名称赋初值。重新编译,观察运行结果。(5)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。参考程序如下:#include class Goods public: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 12 页11 / 12 Goods(int w) 。 int GetWeight() const 。void Sell() 。 static int GetTotalWeight() 。private: int weight 。 static int totalWeight 。public: const char* name。Goods:Goods(int w):name( 鸡蛋 ) weight=w 。 totalWeight+=w 。 void Goods:Sell() totalWeight-=weight 。weight=0 。 int Goods:GetWeight() const return weight 。 int Goods:GetTotalWeight() return totalWeight 。 int Goods:totalWeight=0 。int main() int w 。coutw 。 Goods g1(w)。coutw 。 Goods g2(w)。cout 库存货物重量为:。 coutGoods:GetTotalWeight()endl 。g2.Sell()。cout 卖掉第 2箱货物后,库存货物重量为:。 coutg1.GetTotalWeight()endl 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 12 页12 / 12 cout 货物名称为:g1.nameendl 。return 0。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 12 页