《面向对象程序设计》实验指导书 16个实验含参考代码Word文档格式.docx
《《面向对象程序设计》实验指导书 16个实验含参考代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》实验指导书 16个实验含参考代码Word文档格式.docx(39页珍藏版)》请在冰点文库上搜索。
有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;
(5)编程4:
建立一个动态链表并进行输出和删除管理。
链表的每个节点为学生信息,包括:
学号,姓名,性别,下一学生信息的指针。
程序的工作:
(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;
(b)删除中间的节点,再顺序输出学生信息。
(6)使用debug调试功能:
追踪第2个程序中函数的运行。
(7)思考:
在第2个程序中,如果a,b,c的值较大,则显示的结果会怎样?
这时如何解决此问题?
(提示:
显示的结果会不对,可能还会是负数,定义一个数组来存放最后结果。
)
实验要求:
(1)掌握VisualC++6.0开发环境的常用功能及使用,能进一步使用VisualC++6.0的debug调试功能:
单步调试、设置断点等;
(2)掌握C++函数的定义及使用,掌握函数的嵌套调用和递归调用的方法;
(3)掌握C++数组、指针、结构体的定义及使用;
(4)掌握多文件的程序的编译和运行方法;
(5)程序格式规范,程序运行正确;
(6)认真书写实验报告,如实填写各项实验内容。
实验步骤:
(1)启动VisualC++6.0开发环境;
(2)熟悉VisualC++6.0编译系统的常用功能;
(3)在file菜单中,新建C++源程序c1.cpp;
(4)编辑C++源程序文件c1.cpp的内容。
(5)编译c1.cpp,系统会提示是否创建工程(由于前面没有创建工程),选择“是”。
则创建一个工程;
(6)程序编译正确时,则可建立可执行程序;
(注意观察每步的结果)
(7)运行可执行文件;
(8)关闭工作空间。
(9)对编程2,在file菜单中,新建C++源程序cpp2_1;
(10)编辑C++源程序文件cpp2_1的内容;
(11)编译cpp2_1,系统会提示是否创建工程(由于前面没有创建工程),选择“是”,则创建工程;
(12)在file菜单中,新建C++源程序cpp2_2;
(13)编辑C++源程序文件cpp2_2的内容;
(14)编译文件cpp2_2时,系统提示是否加入到此工程,选择“是”,则把文件cpp2_2加入到该工程中。
(15)编译和运行此程序,并注意观察每步的结果。
(16)使用调试功能:
运行到光标处、单步跟踪、查看变量值。
(17)使用关闭工作空间。
(18)参照上述方法,完成编程3和编程4。
注意:
若编译时出错:
“fatalerrorc1010:
unexpextedendoffilewhilelookingforprecompiledheaderdirective.”;
该文件需要包含头文件:
stdafx.h,即在开头有语句:
#include“stdafx.h”
思考题:
假如已建立了两个C++源程序c1.cpp和c2.cpp。
先用open打开c1.cpp,并完成了编译、连接和运行,再打开c2.cpp,对它进行编译和连接。
此时会出现什么问题?
原因何在?
怎样解决?
实验二类和对象的应用
类和对象的应用
(1)熟悉C++面向对象的程序设计的基本概念;
(2)练习类的定义和对象的创建;
(3)练习对象的成员函数的调用方法以及对象的初始化;
事先编好程序,上机调试和运行程序,分析结果。
(1)编程1:
定义并实现一个简单的学生类:
公有属性为:
学号、姓名、班级,成员函数为输入和显示一个学生的上述信息;
(2)将程序
(1)中的数据成员改为私有的,考虑对程序有何影响;
设计一个长方形类
Rectangle。
成员变量包括:
长度和宽度,成员函数有:
Area计算面积,Set设置长方形的长和宽,Get获取长方形的长和宽。
最后,编写一个主程序来测试该类及成员函数。
设计一个汽车类Car。
成员变量有:
品牌,颜色,车门,车灯,行驶速度。
成员函数有:
打开车门、打开车灯、加速、减速等。
最后,编写一个主程序来测试该类及功能。
在成员函数中用输出成员函数名来表示该成员函数被调用)
(1)掌握C++类和对象的基本概念;
(2)掌握C++类和对象的定义及使用;
(3)掌握对象的成员函数的调用方法;
(4)程序格式规范,程序运行正确;
(5)认真书写实验报告,如实填写各项实验内容。
(2)创建一个项目;
(3)建立C++源程序文件;
(4)编辑C++源程序文件内容;
(5)建立并运行可执行程序;
(6)关闭工作空间。
实验三类的构造函数、析构函数的应用
类的构造函数、析构函数的应用
(1)练习类的构造函数、析构函数的定义和使用方法;
(2)练习对象数组、对象指针的使用;
(3)练习类的静态成员的使用。
(1)编程:
设计一个学生类。
学生的属性有:
学号,姓名,性别;
学生的行为有:
输入学生的上述属性和输出学生的上述属性。
编写构造函数对学生的所有属性初始化,无参数的构造函数设置学号为1001,姓名为“张三”,性别为‘M’(‘M’代表男,‘F’代表女)。
(2)修改上述程序:
修改定义析构函数,在析构函数中输出学号。
再运行程序,观察运行结果。
(3)修改上述main程序:
使用对象指针,用new生成一个学生对象,然后,用delete清除该对象,使用单步运行观察运行结果。
(4)修改上述程序:
增加一个私有数据成员成绩score;
增加一个成员函数readdata:
输入一学生的学号和成绩;
增加一个成员函数getscore:
取得学生的成绩。
再修改main函数;
定义一个班的同学(假如一个班有10位同学,采用对象数组),输出该班的平均成绩。
(5)不用对象数组,而使用静态的数据成员来实现(4)中求一个班的学生的平均成绩,学生的成绩在构造函数中输入。
定义2个静态数据成员,1个是存储总成绩,1个是存储学生人数)。
(6)分别运行上述程序,并分析结果。
在增加一个新的功能时,可以把暂时不需要的功能代码给注释掉。
(1)掌握C++类的构造函数、析构函数的定义和使用方法;
(2)掌握C++对象数组、对象指针的使用;
(3)掌握类的静态数据成员的定义和使用;
实验四友员和运算符重载
友元和运算符重载
(1)进一步了解运算符重载的概念和使用方法;
(2)掌握几种常用的运算符重载的方法;
(3)练习友员函数的定义和使用;
(4)了解转换构造函数的使用方法。
(1)有两个矩阵a和b,均为2行3列。
求两个矩阵之和。
重载运算符“+”,使之能用于矩阵相加。
如:
c=a+b。
(2)编写一个友元函数来读取矩阵指定所在行列的值。
(3)定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。
编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。
可以设想为:
一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。
(1)掌握C++运算符重载的概念和使用方法;
(2)熟悉转换构造函数的使用方法;
(3)程序格式规范,程序运行正确;
(4)认真书写实验报告,如实填写各项实验内容。
(5)建立并运行可执行程序,并分析结果;
实验五类的继承与派生
实验名称:
类的继承与派生
(1)进一步理解继承与派生的概念;
(2)掌握通过继承派生出一个新的类的方法;
(1)编程:
编写一个学生类Student。
学生的保护属性有:
学号(Num),姓名(Name),性别(Sex);
学生的公用成员函数有:
ReadData()用于输入Num、Name、Sex。
OutputData()用于输出Num、Name、Sex。
然后,在学生类的基础上派生出研究生类Graduate,该类新增私有属性研究方向(ResearchD),新增公用成员函数ResearchWork(),该函数功能为输出学号和研究方向。
编写main函数测试基类和派生类的各属性很函数的访问。
修改派生类的派生方式以及基类成员的访问方式,再测试看看基类和派生类的属性访问方式有何不同。
(2)编程:
在上述工程中增加一个Teacher(教师)类,采用多重继承方式由Student和Teacher类公有派生出新类Student_Teacher。
Teacher类的保护成员有:
Name、Sex、Title(职称)、Wages(工资)。
两个基类中的Name、Sex同名,在引用这些数据成员时,指定作用域。
在派生类Student_Teacher中,增加两个成员函数:
ReadF1()用于读入:
Num、Name、Sex、Title、Wages。
Show()用于输出数据,在Show()中,首先调用Student类的display()函数用于输出Num、Name、Sex,然后再用cout语句输出Title、Wages。
在类体中声明成员函数,在类外定义成员函数。
类的三种继承方式的主要区别是什么?
(1)掌握继承与派生的概念;
实验六类的多态性与虚函数
类的多态性与虚函数
(1)了解多态性的概念;
(2)了解虚函数的作用和使用方法;
(3)了解纯虚函数和抽象类的概念和用法。
定义抽象基类Shape(图形)。
Shape类有一个公共的纯虚函数Area,用于派生类求图形的面积。
(2)由Shape派生出3个派生类:
Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数PrintArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。
在主程序中测试这些类的PrintArea函数。
(3)在类Circle基础上再派生一个圆柱体Cylinder,重载Area函数求圆柱体的体积。
然后,编写主程序采用静态多态性和动态多态性分别测试Area函数。
(4)在类Circle中定义一个析构函数,让它输出一行信息“ThisisCicleDestruction。
”,在类Cylinder中定义一个析构函数,让它输出一行信息“ThisisCylinderDestruction。
”。
在主程序中用指向基类Circle类的指针动态生成Cylinder类对象,然后用delete语句释放该对象,测试看看运行结果如何。
再修改Circle的析构函数为虚函数,测试看看运行结果如何。
(5)运行上述程序,并分析结果。
(1)掌握多态性的概念;
(2)掌握虚函数的作用和使用方法;
(3)掌握纯虚函数和抽象类的概念和用法;
虚函数的作用是什么?
附录:
各实验的程序代码
实验1:
程序代码
程序1:
#include<
iostream>
usingnamespacestd;
intmain()
{intmax(inta,intb,intc);
intmax(inta,intb);
inta=8,b=-12,c=7;
cout<
<
"
max(a,b,c)="
max(a,b,c)<
endl;
max(a,b)="
max(a,b)<
return0;
}
intmax(inta,intb,intc)
{if(b>
a)a=b;
if(c>
a)a=c;
returna;
intmax(inta,intb)
{if(a>
b)returna;
elsereturnb;
程序2:
//cpp2_1.cpp
{intfac(int);
inta,b,c,sum=0;
entera,b,c:
;
cin>
>
a>
b>
c;
sum=sum+fac(a)+fac(b)+fac(c);
a<
!
+"
b<
c<
="
sum<
}
//cpp2_2.cpp,递归方式
intfac(intn)
{
if(n<
=1)return1;
else
return(n*fac(n-1));
//cpp2_2.cpp,非递归方式
{intf=1;
for(inti=1;
i<
=n;
i++)
f=f*i;
returnf;
程序3:
{inti,j,row=0,colum=0,max;
inta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
max=a[0][0];
for(i=0;
=2;
for(j=0;
j<
=3;
j++)
if(a[i][j]>
max)
{max=a[i][j];
row=i;
colum=j;
max="
max<
row="
row<
colum="
colum<
程序4:
//#include<
iomanip>
constintn=10;
structstudent
{charnum[6];
charname[8];
charsex;
student*next;
};
{inti;
student*head,*p1,*p2;
head=p1=NULL;
3;
p2=newstudent;
if(p2==NULL)
break;
inputstudentinformation:
"
Num:
p2->
num;
name:
name;
sex:
sex;
if(i==0)
head=p1=p2;
p1->
next=p2;
p1=p2;
if(p1!
=NULL)p1->
next=NULL;
Outputinformation:
\n"
p1=head;
i=0;
while(p1!
=NULL)
i++;
Number"
<
cout<
num:
p1->
num<
name:
name<
sex:
sex<
p1=p1->
next;
p1=head->
head->
next=p1->
deletep1;
Afterdelete,Outputinformation:
while(head!
p1=head->
deletehead;
head=p1;
打开c2.cpp,对它进行编译时,出现提示:
选择“否”,出现提示:
选择“是”,则编译完成。
连接时,出现错误提示:
--------------------Configuration:
Cpp1-Win32Debug--------------------
Linking...
Cpp2.obj:
errorLNK2005:
_mainalreadydefinedinCpp1.obj
Debug/Cpp1.exe:
fatalerrorLNK1169:
oneormoremultiplydefinedsymbolsfound
Errorexecutinglink.exe.
Cpp1.exe-2error(s),0warning(s)
出错原因:
c1工程中有两个main()函数。
解决方法:
关闭c1的工作空间后,再打开c2.cpp。
实验2:
(1)定义并实现类student
#include<
iostream.h>
classstudent//定义类
{public:
//类的公有成员
intNum;
charName[10];
charSclass[20];
voidinputs()
{cin>
Num>
Name>
Sclass;
voiddisplay()
{cout<
\n学号:
Num<
”姓名:
”<
Name<
”班级:
Sclass<
};
voidmain()//主函数
{studentss;
//声明对象
ss.inputs();
//调用成员函数
ss.display();
}
(2)程序2
include<
classTime
{public:
voidset_time(void)
{cin>
hour;
minute;
sec;
voidshow_time(void)
{cout<
hour<
:
minute<
sec<
private:
inthour;
intminute;