北京工业大学计算机学院C++课程语言程序设计与面向对象基础实验手册Word文档格式.docx
- 文档编号:22453562
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:63.48KB
北京工业大学计算机学院C++课程语言程序设计与面向对象基础实验手册Word文档格式.docx
《北京工业大学计算机学院C++课程语言程序设计与面向对象基础实验手册Word文档格式.docx》由会员分享,可在线阅读,更多相关《北京工业大学计算机学院C++课程语言程序设计与面向对象基础实验手册Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
六、实验过程要求:
1.熟悉VC++6.0开发环境;
2.输入程序2_1,并调试到可以正常运行。
运行之后,尝试去掉源程序中的#include语句,重新编译,观察会有什么问题;
3.将程序中第2个for语句替换为do-while语句,完成相同的功能;
4.修改程序输入部分,由用户输入小狗的相关数据;
5.修改程序输出部分,由用户指定小狗的编号,输出对应小狗的数据。
用switch语句;
6.修改程序,使之能处理用户指定的任意多个小狗(最多不超过10个)。
七、实验总结:
程序2_1
#include<
iostream.h>
iomanip.h>
structDog//定义描述dog的结构体
{
intnumber;
//dog的编号
floatweight;
//dog的体重
intlength;
//dog的身长
};
voidmain()//主函数
{inti=0;
Dogdog[3];
//初始化
for(i=0;
i<
3;
i++)
{
dog[i].number=i+1;
}
dog[0].weight=2;
dog[1].weight=3;
dog[2].weight=5;
dog[0].length=20;
dog[1].length=40;
dog[2].length=50;
//处理
//输出
cout<
<
setw(20)<
"
编号"
<
体重"
身长"
<
endl;
endl;
cout<
dog[i].number;
dog[i].weight;
dog[i].length;
}
实验二:
函数的应用
一、实验目标:
1.掌握函数的声明和调用方法;
2.练习重载函数的使用;
3.练习函数模板的使用;
4.练习使用系统函数;
5.用DEBUG的调试功能,跟踪到函数内部:
学习完第3章函数。
狗家庭管理
继续编写上个实验内容。
1.基于程序2_1,编写一个函数Average,计算出生3只小狗的平均身长;
2.重载函数Average,计算出生3只小狗的平均体重;
3.使用函数模板实现Average;
4.编写另一函数trainingMath,给小狗出训练题让小狗计算xy的值。
要求用系统函数pow(x,y)(功能是计算xy的值),注意包含头文件math.h。
5.将函数的输入和输出部分分别写进函数GetDogInfo和PutDogInfo中,注意这两个函数的参数应如何设计,建议PutDogInfo用值传递,GetDogInfo用地址传递;
6.在主函数中调用这些函数,并给出结果。
实验三类与对象
1.掌握类的定义和对象的声明;
2.巩固具有不同访问属性的成员的访问方式;
3.观察构造函数和析构函数的执行过程;
4.练习类的组合的方法;
5.用DEBUG调试功能观察程序流程,跟踪类的构造函数、析构函数和成员函数的执行情况。
学习完第4章类与对象。
用面向对象的设计重新编写“狗家庭管理”程序。
需要存储的狗的特征有编号、体重、身长和出生日期,狗需要学习计算xy的值,程序需要由用户录入所需的数据和显示数据。
1.分析:
定义一个狗类,包含属性有:
编号、体重、身长和出生日期,行为有:
计算xy的值,为保护狗类对象的属性,属性应为私有成员,这样就需要狗类有相应的公有成员函数,使能通过每个狗类对象设置和获得属性值。
依据面向对象的思想,日期需单独定义对象,有年月日,且应能处理相应的输入输出。
再将日期类的对象作为狗类的成员。
类设计:
Dog类Date类
intyear;
floatweight;
intmonth;
intlength;
intday;
DateBirthday;
Date(inty,intm,intd);
Dog();
~Date();
~Dog();
voidPutDate();
floattrainingMath(floatx,floaty);
voidGetDate();
voidPutDogInfo();
voidGetDogInfo();
2.定义Date类,属性intyear(年),intmonth(月),intday(日)均为私有成员;
公有成员函数有构造和析构函数,PutDate()函数用于输出日期和GetDate()函数用于输入日期,其中注意构造函数的带参数的。
3.定义一个Dog类,属性:
intnumber(dog的编号),floatweight(dog的体重),intlength(dog的身长)均为私有成员;
公有成员函数:
trainingMath,构造函数和析构函数,另外还有函数PutDogInfo用于显示输出各属性值,函数GetDogInfo录入各属性值;
内嵌Date类对象,私有数据成员,存储出生日期。
4.实现Date类和Dog类的成员函数。
5.在main函数中,声明三个Dog类对象代表其中三只小狗,完成与实验二相同的功能。
观察构造函数和析构函数的调用顺序。
实验四C++程序的结构
1.观察程序运行中变量的作用域、生存期和可见性;
2.巩固类的静态成员的使用;
3.多文件结构的使用;
学习完第5章C++程序的结构。
五、实验案例
1.运行程序5_1,观察变量的作用域、生存期和可见性。
2.继续编写“狗家庭管理”,加入对狗家庭中小狗的总数的管理。
1.输入并运行程序5_1,观察变量x,y的值,体会变量的作用域、生存期和可见性。
2.用静态数据成员表示类属性:
小狗的总数。
在Dog类中,加入私有的静态数据成员:
staticinttotal,初始化这个成员为0。
为了维护小狗总数,在Dog类构造函数中使total加1,即每生成一个小狗对象,则总数加1。
3.为使程序随时能得到小狗总数值,使用静态成员函数。
Dog类中,加入公有的静态成员函数:
GetTotal,用于获取小狗的总数,编程实现GetTotal。
4.修改实验四程序,使程序能处理用户指定的任意多个小狗(可暂时认为2个)。
使用两种方法实现程序:
①类名限定的静态成员函数;
②用对象外部调用静态数据成员;
比较程序结果,注意第②种方法需将静态数据成员total该为公有,考虑为什么?
这样给编程带来了什么好处?
5.将Dog类定义放入头文件dog.h中,将Date类定义放入头文件date.h中,将类的实现部分放入.cpp文件中,重新编译、生成和运行程序。
程序5_1
voidfn1();
intx=1,y=2;
intmain()
{
Begin……"
x="
x<
y="
y<
Evaluatexandyinmain()……"
intx=10,y=20;
Stepintofn1()……"
fn1();
Backinmain()"
return0;
voidfn1()
inty=200;
实验五数组、指针与字符串
1.学会使用数组;
2.学会字符串数据的组织和处理;
3.学习标准C++库的使用;
4.掌握指针的使用方法;
5.用DEBUG观察指针的内容及其所指对象的内容;
6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用;
7.分别用字符数组和标准C++库练习处理字符串。
学习完第6章数组、指针与字符串。
1.编写并测试3×
3矩阵转置函数,使用数组保存3×
3矩阵。
2.使用动态内存分配生成动态数组重新完成上题,用指针实现函数功能。
3.编程实现两个字符串连接。
要求使用字符数组保存字符串,不要使用系统函数。
4.用string类定义字符串对象,重新实现上题。
5.继续编写“狗家庭管理”,类中加入小狗名字属性,并在程序中加入名字的录入和显示。
同时,使程序能处理狗对象的数组,程序能处理指定的任意多个小狗。
1.数组操作训练
3×
3矩阵用3×
3整型数组存储,用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对那些元素进行操作,编写main函数实现输入输出。
2.动态内存分配与指针训练
改写转置矩阵函数,参数为整型指针,使用指针对数组元素操作,在main函数中使用new操作符分配内存生成动态数组。
通过DEBUG观察指针内容及其所指的对象的内容。
3.字符数组处理字符串,编写两个字符串的连接
定义字符数组保存字符串,在程序中提示用户输入两个字符串,连接两个字符串,最后输出连接后的字符串。
注意:
用cin实现输入时,字符串有结束标志。
4.String类处理字符串
定义String类对象,编程实现两个字符串连接。
5.字符串数据成员处理及对象数组
Dog类中加入私有的String类对象DogName代表小狗的名字,并在PutDogInfo和GetDogInfo中加入对小狗名字的处理。
6.对象数组处理:
main函数中声明Dog类对象数组,声明时数组大小只能固定,对对象数组处理的循环次数用静态成员total控制,即实际小狗的数目。
(也可用对象指针数组实现)
实验六继承与派生
1.学会定义和使用类的继承关系,定义派生类;
2.熟悉不同继承方式下对基类成员的访问控制;
3.学习利用虚基类解决二义性问题。
学习完第7章继承与派生。
改写“狗家庭管理”为“家庭宠物管理”。
设家中不但有狗家挺,还有猫家庭,狗和猫有共同的属性,如:
名字、编号、重量、身长、出生日期等,猫和狗都需要输出显示。
猫和狗一起编号,每增加一个宠物,编号加1,编号初始值为0。
程序要猫和狗都做数学题:
计算xy的值。
狗要看门,猫要抓老鼠。
狗每看门1个小时,则给一块糖,猫每抓一只老鼠,给两块糖,但有些狗也可去抓老鼠,同样也给糖。
按要求编写程序。
根据上述需求,设计基类Pet,代表宠物的共性,然后派生出Dog类和Cat类。
由于有些狗也能抓老鼠,兼有狗和猫的特点,这样的狗再派生一个类DogCat表达,DogCat同时继承Dog和Cat两个类。
Dog类和Cat类分别有不同的奖励糖方式,显示的信息也会不同,因此,基类中显示信息函数PutInfo()和给糖的函数PayCandy()均为空,而在派生类中用同名函数覆盖实现具体功能。
函数trainingMath则应在整个类族中公用。
由于DogCat类的两个基类又有公共基类Pet,所以,类Pet应为虚基类。
类图设计如下:
2.
编写基类Pet的数据成员均为保护的(为保护数据隐蔽,不能用公有;
派生类也要使用Pet类数据,所以不能用私有),基类Pet的成员函数均为公有,成员函数PurInfo和PayCandy为空函数。
编写派生类Dog,并实现成员函数。
编写简单的主函数测试这两个类。
编译并运行。
如将Pet的保护数据成员该为私有,看会出现什么问题。
3.观察构造函数与析构函数的执行情况。
4.编写Cat类和DogCat类,并编写主函数测试。
建议主函数中定义Dog类,Cat类和DogCat类对象各一个。
注意将Pet该为虚基类,如没有将其设成虚基类,会有什么问题?
实验七多态性
1.掌握运算符重载的方法;
2.使用虚函数实现动态多态性;
学习完第8章多态性。
1.定义一个Point类,有坐标x,y两个成员变量;
对Point类重载“++”、“--”运算符,实现坐标x,y同时加减。
2.修改“家庭宠物管理”
实验七中程序有两点不足:
①基类的成员函数PutInfo和PayCandy的函数体为空,但在实现部分也要写出函数题,显得冗余;
②在主函数中,建立了三个不同类的对象,对它们进行类似的操作,程序不够简洁;
修改基类Pet中函数PutInfo和PayCandy为纯虚函数。
则在主函数中便可以依据赋值兼容规则用基类的指针数组来处理不同派生类对象,实现多态性。
1.编写程序定义Point类,在类中定义整型的私有成员x,y,定义成员函数Point&
operator++();
Pointoperator++(int);
实现对Point类重载“++”。
定义成员函数Point&
operator--();
Pointoperator--(int);
实现对Point类重载“--”。
2.修改“家庭宠物管理”中的基类函数PutInfo和PayCandy为纯虚函数,在主函数中定义Dog类,Cat类和DogCat类对象,用基类的指针数组存放各对象的地址,实现对各个功能的测试。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京 工业大学 计算机 学院 C+ 课程 语言程序设计 面向 对象 基础 实验 手册