}
实验五数组、指针与字符串
一、实验目标:
1.学会使用数组;
2.学会字符串数据的组织和处理;
3.学习标准C++库的使用;
4.掌握指针的使用方法;
5.用DEBUG观察指针的内容及其所指对象的内容;
6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用;
7.分别用字符数组和标准C++库练习处理字符串。
二、实验前的知识准备:
学习完第6章数组、指针与字符串。
三、实验环境要求:
硬件环境:
处理器主频为166MHz或更高,内存大于32M,硬盘空间大于500M,CD-ROM驱动器,VGA或更高分辨率显示器,鼠标,键盘等。
软件环境:
Windows98及其以后版本的操作系统,VisualC++6.0Enterprise。
四、实验时间:
2学时
五、实验案例
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章继承与派生。
三、实验环境要求:
硬件环境:
处理器主频为166MHz或更高,内存大于32M,硬盘空间大于500M,CD-ROM驱动器,VGA或更高分辨率显示器,鼠标,键盘等。
软件环境:
Windows98及其以后版本的操作系统,VisualC++6.0Enterprise。
四、实验时间:
2学时
五、实验案例
改写“狗家庭管理”为“家庭宠物管理”。
设家中不但有狗家挺,还有猫家庭,狗和猫有共同的属性,如:
名字、编号、重量、身长、出生日期等,猫和狗都需要输出显示。
猫和狗一起编号,每增加一个宠物,编号加1,编号初始值为0。
程序要猫和狗都做数学题:
计算xy的值。
狗要看门,猫要抓老鼠。
狗每看门1个小时,则给一块糖,猫每抓一只老鼠,给两块糖,但有些狗也可去抓老鼠,同样也给糖。
按要求编写程序。
六、实验过程要求:
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章多态性。
三、实验环境要求:
硬件环境:
处理器主频为166MHz或更高,内存大于32M,硬盘空间大于500M,CD-ROM驱动器,VGA或更高分辨率显示器,鼠标,键盘等。
软件环境:
Windows98及其以后版本的操作系统,VisualC++6.0Enterprise。
四、实验时间:
2学时
五、实验案例
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类对象,用基类的指针数组存放各对象的地址,实现对各个功能的测试。
七、实验总结: