面向对象程序设计方法学》实验指导书Word文件下载.docx
- 文档编号:21315087
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:24
- 大小:25.87KB
面向对象程序设计方法学》实验指导书Word文件下载.docx
《面向对象程序设计方法学》实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计方法学》实验指导书Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
(3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。
(4)认真完成每次实验,并写出实验报告。
4、实验步骤
(1)启动VisualC++开发环境
(2)创建一个项目
1)单击File菜单中的New选项,显示新建对话框
2)选择Win32ConsoleApplication(VC++)。
3)选择项目所在路径及输入项目的名称lab1_1
4)依次按‘下一步’直至完成为止。
(3)至此,已经建立好工程相关的文件,在生成的main函数中写入必要的内容即可。
(4)输入并运行程序:
用do-while语句编程,求自然数1~10之和
1)建立C++源程序文件
●选菜单命令Project|AddtoProject|New,弹出New对话框
●在New对话框的Files选项卡中选择C++SourceFile,并填入文件名称lab1_1,单击OK按钮,完成新建C++源程序文件
2)编辑C++源程序文件
●在文件编辑窗口中输入代码
●完成后,选择菜单File|Save保存这个文件
3)建立并运行可执行程序
●选择菜单命令Build,建立可执行程序
如果你正确输入了源程序,此时便成功地生成了可执行程序。
如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build建立可执行程序。
●选择菜单命令Run,运行程序,观察屏幕显示内容。
(5)程序正确运行之后,在源程序第一行”#include<
iostream.h>
”前面加注释标记”//”使之成为注释行,重新编译,观察编译的结果。
(6)选择菜单命令File|ColseWorkSpace关闭工作空间,另建立一个项目lab1_2,包含一个C++源程序lab1_2.cpp,将do-while语句用for语句代替,完成与实验内容1相同的功能。
(7)选择菜单命令File|ColseWorkSpace关闭工作空间,建立项目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<
iostream>
usingnamespacestd;
constfloatPI=3.1416;
intmain()
{
intiType;
floatradius,a,b,area;
cout<
<
”图形的类型?
(1为圆形,2为长方形,3为正方形):
”;
cin>
>
iType;
switch(iType)
case1:
cout<
“圆的半径为:
”;
radius;
area=PI*radius*radius;
”面积为”<
area<
endl;
break;
case2:
”矩形的长为:
a;
”矩形的宽为:
b;
area=a*b;
”面积为:
”<
case3:
”正方形的边长为:
area=a*a;
default:
”不是合法的输入值!
}
return0;
实验二函数与重载(2学时)
(1)掌握函数的定义和调用方法。
(2)练习重载函数使用。
(3)练习缺省参数的函数使用
(4)练习使用系统函数。
2、实验内容:
(1)编写一个函数把华氏温度转换为摄氏温度,转换公式为:
C=(F-32)*5/9。
(2)编写重载函数max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。
(3)给求取两个整数最大值的重载函数max1赋缺省参数值0,并利用该函数来判断某个整数是否大于0,比如max1(-6)。
(4)使用系统函数pow(x,y)计算x^y的值,注意包含头文件cmath。
4、实验步骤:
(1)编写函数floatConvert(floatTempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。
程序名为lab2_1.cpp.
(2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。
程序名:
lab2_2.cpp。
intmax1(inta=0,intb=0)
returna>
b?
a:
intmax1(inta,intb,intc)
inttmp=max1(a,b);
returntmp>
c?
tmp:
c;
doublemax1(doublea,doubleb)
doublemax1(doublea,doubleb,doublec)
doubletmp=max1(a,b);
intn1,n2,n3;
cout<
"
请输1个整数:
;
cin>
n1;
if(max1(n1)==0)
cout<
这个数小于或等于0"
else
这个数大于0"
请输2个整数:
n1>
n2;
最大值为"
max1(n1,n2)<
请输3个整数:
n2>
n3;
max1(n1,n2,n3)<
doubled1,d2,d3;
请输2个实数:
d1>
d2;
max1(d1,d2)<
请输3个实数:
d2>
d3;
max1(d1,d2,d3)<
return0;
(3)若将三个整数的函数给定缺省参数值0,重新编译,观察编译的结果。
(4)在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
实验三类的定义与使用(2学时)
1、实验目的
(1)掌握类的定义和使用
(2)掌握类的定义和对象的声明
(3)观察构造函数和析构函数的执行过程。
(4)观察具有不同访问属性的成员的访问方式。
2、实验内容
(1)定义一个TDate类,包含年(year)、月(month)、日(day)等属性,有三个公有成员函数:
SetDate来设置日期、AddOneDay来对日期进行加1天的操作、print来输出日期;
(2)对构造函数或成员函数进行重载;
(3)设置构造函数或成员函数的缺省参数
(4)观察构造函数和析构函数的调用顺序;
(5)观察具有不同访问属性的成员的访问方式。
4、实验步骤
(1)添加一个头文件TDate.h来定义TDate类。
包含:
1)私有数据成员:
年(year)、月(month)、日(day)等;
2)定义2个构造函数,并对其中的一个构造函数设置缺省参数;
3)定义1个析构函数。
4)定义成员函数SetDate来设置日期,AddOneDay来对日期进行加1天的操作,print来输出日期。
(2)添加一个源文件TDate.cpp来实现成员函数。
(3)在主程序中定义若干个TDate类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。
写在TDate.cpp文件中或另外一个cpp文件中。
(4)将成员函数print的访问属性设为private或protected后,重新编译,观察编译结果。
//======日期类定义部分TDate.h======//
#ifndefTDate_H
#defineTDate_H
classTDate
public:
TDate()
{
year=2003;
month=1;
day=1;
调用缺省的构造函数"
}
TDate(inty,intm=1,intd=1)
year=y;
month=m;
day=d;
调用带参数的构造函数"
};
voidSetDate(inty,intm,intd);
voidAddOneDay();
voidprint();
~TDate(){cout<
调用析构函数"
private:
intyear;
intmonth;
intday;
};
#endif
//======日期类实现部分TDate.cpp======//
#include"
TDate.h"
intmaxDays(int,int);
voidTDate:
:
print()
{cout<
year<
年"
month<
月"
day<
日"
SetDate(inty,intm,intd)
{year=y;
month=m;
day=d;
AddOneDay()
day=day+1;
if(day>
maxDays(year,month))
{month=month+1;
day=1;
if(month>
12)
{year=year+1;
month=1;
intmaxDays(inty,intm)
intdays;
switch(m)
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
//31天
break;
case2:
if((y%4==0&
&
y%100!
=0)||y%400==0)//闰年29天
days=29;
else
days=28;
//}
default:
//30天
days=30;
}
returndays;
TDated0;
不带参数的日期对象:
d0.print();
TDated1(2003);
带1个参数的日期对象:
d1.print();
TDated2(2003,12);
带2个参数的日期对象:
d2.print();
TDated3(2004,10,14);
d3.AddOneDay();
带3个参数的日期对象加一天后:
d3.print();
d3.SetDate(2005,4,8);
重新设定日期后:
实验四静态成员与常成员的使用(2学时)
(1)学习静态成员的使用
(2)学习常成员的使用
(3)掌握静态数据成员与常数据成员的初始化
(1)某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现在要求设计一个Goods类并使用静态成员来模拟商店货物购进和卖出的情况;
(2)为上面的Goods类添加一个常数据成员(货物名称),并对货物名称进行初始化;
(3)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
(1)添加一个头文件Goods.h来定义Goods类。
1)私有数据成员货物重量(weight)、私有静态数据成员库存总重量(totalWeight);
2)定义构造函数来描述进货过程;
3)定义成员函数Sell来描述货物卖出过程,成员函数GetWeight来获取当前货物重量。
4)定义静态成员函数GetTotalWeight来读取当前货物的库存总重量。
5)自定义若干个成员函数。
(2)添加一个源文件Goods.cpp来实现成员函数。
(3)在主程序中定义若干个Goods类的对象,模拟进货与卖出的过程。
查看运行结果。
(4)为Goods类添加一个常数据成员constchar*name来表示货物名称,改写构造函数及主程序的调用,在构造函数的成员初始化列表中对货物名称赋初值。
重新编译,观察运行结果。
(5)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
classGoods
Goods(intw);
intGetWeight()const;
voidSell();
staticintGetTotalWeight();
intweight;
staticinttotalWeight;
constchar*name;
Goods:
Goods(intw):
name("
鸡蛋"
)
weight=w;
totalWeight+=w;
voidGoods:
Sell()
weight=0;
totalWeight-=weight;
intGoods:
GetWeight()const
returnweight;
GetTotalWeight()
returntotalWeight;
totalWeight=0;
intw;
购进第1箱货物重量为:
w;
Goodsg1(w);
购进第2箱货物重量为:
Goodsg2(w);
库存货物重量为:
GetTotalWeight()<
g2.Sell();
卖掉第2箱货物后,库存货物重量为:
g1.GetTotalWeight()<
货物名称为:
g1.name<
实验五子对象和堆对象(2学时)
(1)学习子对象的使用
(2)学习堆对象的使用
(1)定义一个人员类People,添加属性:
姓名、出生日期、身高、住址;
可修改人员的住址;
(2)出生日期为一个在实验三中定义的TDate类,将出生日期作为People类的子对象;
(1)新建一个工程,将实验三中定义的TDate类加入到工程中;
(2)新定义一个人员类People,添加私有的数据成员:
姓名(name)、出生日期(birthday)、身高(height)、住址(address);
(3)在构造函数中实现数据成员的初始化,尤其是子对象出生日期及堆对象姓名和住址的初始化;
(4)在析构函数中释放堆对象姓名和住址;
(5)实现修改人员住址的成员函数。
//TDate类的定义参考实验三
string.h>
classPeople
char*name;
char*address;
intheight;
TDatebirthday;
People(char*pName,char*pAddress,inttheHeight,inty,intm,intd):
birthday(y,m,d)
height=theHeight;
name=newchar[strlen(pName)+1];
strcpy(name,pName);
name[strlen(pName)]='
\0'
address=newchar[strlen(pAddress)+1];
strcpy(address,pAddress);
address[strlen(pAddress)]='
~People()
delete[]name;
delete[]address;
voidSetAddress(char*pAddress)
delete[]address;
voidprint()
姓名:
name<
身高:
height<
住址:
address<
出生日期:
birthday.print();
//主函数调用
Peopleren("
张三"
"
中北大学10号楼"
20,1980,4,8);
ren.SetAddress("
中北大学20号楼"
);
ren.print();
实验六类的继承与派生(2学时)
(1)学习定义和使用类的继承关系,定义派生类。
(2)熟悉不同继承方式下对基类成员的访问控制。
(3)学习利用虚基类解决二义性问题
(1)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?
编程试试看。
(2)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。
从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?
(1)编写程序定义基类Animal,成员变量age定义为私有的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 方法 实验 指导书