《面向对象程序设计A》实验指导书080902.docx
《《面向对象程序设计A》实验指导书080902.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计A》实验指导书080902.docx(35页珍藏版)》请在冰豆网上搜索。
《面向对象程序设计A》实验指导书080902
《面向对象程序设计A》实验指导书
(适用于计算机科学与技术、网络工程专业)
计算机科学与技术学院
2008-3
说明
一、上机实践的目的不只是验证教材中的例题和自己编的作业程序,应该是:
1.通过反复实践,加深对课堂讲授内容的理解,熟练地掌握语法规则。
2.熟悉计算机系统操作方法,了解校实验室的计算机网络,熟悉VC++编译系统,实践在VC++环境下进行源程序的编辑、编译、连接、调试和运行等工作
3.通过上机调试程序,善于发现和更正程序中的错误,使程序能正确运行。
二、上机实验的步骤
1.准备好上机所需的程序。
编程题应事先编写好,并经检查无误后上机编辑、调试和运行,以利于提高上机效率。
对程序中有疑问的地方,应作出记号,以便在上机时给予注意。
2.上机输入和调试自己所编的程序时,应该独立思考,特别是要根据“出错信息”,善于分析判断,培养自己解决问题的能力。
3.上机结束后,应及时对运行情况作出分析并如实记录实验结果,注意总结本次调试程序所取得的经验。
三、实践共8次,每次2课时。
实验一C++语言基础
一、实验目的和要求
1、掌握C++程序的基本格式与规范,学会编写简单的C++程序。
2、理解C++程序结构的特点。
3、熟悉C++程序基本的输入输出操作。
4、掌握函数定义、函数调用和函数说明的方法。
5、掌握if语句的用法。
6、掌握switch语句的用法。
7、掌握循环和多重循环的用法。
二、实验内容
1、编写一个简单程序,输出“welcomeyou”,并给程序加一行注释“Firstc++program”。
2、编写内置函数求解2X^2+4X+5的值,X为整数,并用主函数调用该函数。
3、根据输入的百分制按五分制的成绩输出。
百分制与五分制之间的关系见下表。
分别使用if分支结构和switch结构编写程序。
百分制
五分制
90~100
5
80~89
4
60~79
3
0~59
2
4、编程求3~100之间的所有素数。
三、实验步骤
1、第四个内容提示:
用双重循环,核心程序代码为:
for(i=3;i<=100;i++)
{
for(j=2;j<=i-1;j++)
if(i%j==0)
break;
if(i==j)
cout<
}
2、补充:
写出下面程序的运行结果,体会函数的定义和调用。
#include
intm=8;
intadd3(intx,inty=7,intz=m)
{returnx+y+z;}
voidmain()
{
inta=1,b=2,c=3;
cout<cout<}
四、分析与讨论:
1、分析C++编程环境与C编程环境的优缺点。
2、分析总结C++结构化程序的书写规则。
3、分析总结C++程序中输入输出与C语言中的区别。
4、如何正确地设置判断条件。
实验二类与对象
(一)
一、实验目的和要求
1、掌握类、类的成员函数、类的成员函数的定义方式。
2、理解类成员的访问控制方式。
3、掌握对象的定义和操作对象的方法。
4、理解构造函数和析构函数的定义与执行过程。
5、掌握重载构造函数的方法。
二、实验内容
1、定义时间类,有三个私用数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和Print_Time)。
SetTime根据传递的3个参数为对象设置时间;Print_Time负责将对象表示的时间显示输出。
2、使用构造函数代替SetTime成员函数,并用之设置时间。
3、重载时间类的构造函数,时间清0。
4、在时间类的析构函数中输出”Goodbye!
”。
三、实验步骤
1、第三个内容提示:
在类Time内加上:
Time();
在类外加上:
Time:
:
Time()
{
Hour=0;
Minute=0;
Second=0;
}
第四个内容:
析构函数:
Time:
:
~Time()
{
cout<<”goodbye”<}
2、补充内容:
创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。
其功能有修改姓名、显示数据信息。
要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。
其中数据成员为保护的,函数为公有的。
classemployee
{
public:
employee();
voidinputdata();
voiddisplay();
voidchangename(char*name);
protected:
charname[20],street[80],city[20],province[20],zip[20];
};
#include
#include
#include"Employee.h"
employee:
:
employee()
{
char*temp="";
strcpy(name,temp);
strcpy(street,temp);
strcpy(city,temp);
strcpy(province,temp);
strcpy(zip,temp);
}
voidemployee:
:
changename(char*pname)
{
strcpy(name,pname);
}
voidemployee:
:
inputdata()
{
cout<<"inputname:
";
cin>>name;
cout<<"inputStreet:
";
cin>>street;
cout<<"inputcity:
";
cin>>city;
cout<<"inputprovince:
";
cin>>province;
cout<<"inputzip:
";
cin>>zip;
cout<}
voidemployee:
:
display()
{
cout<<"name:
"<cout<<"street:
"<cout<<"city:
"<cout<<"province:
"<cout<<"zip:
"<}
#include
#include"employee.h"
voidmain()
{
employeee;
e.inputdata();
e.display();
e.changename("LiMing");
e.display();
}
四、分析与讨论:
1、分析总结面向对象程序设计的程序的基本构成方法
2、分析总结类、对象和变量之间的区别与联系
3、类作为程序的基本元素,试分析其优势
实验三类与对象
(二)
一、实验目的和要求
1、掌握对象数组定义与使用方法。
2、理解对象指针的概念,学会使用指针引用对象。
3、掌握静态数据成员和静态数据成员函数的基本使用方法。
4、理解友元与友元函数的作用,掌握其使用方法。
二、实验内容
1、定义股票类Stock,记录一支股票交易的基本信息,包括交易日序号、当日最高价、最低价、开盘价、收盘价。
定义一个对象数组存放连续5个交易日的股票信息。
编写主函数,计算两个stock对象的当日收盘价计算当日涨幅。
在主函数中调用该函数计算从第二个交易日开始每天的当日涨幅。
2、在Stock类中定义一个静态数据成员,记录当前Stock对象的数量。
3、定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘价,若是返回真,否则返回假。
三、实验步骤
1、第二个内容提示:
静态数据成员:
private:
staticintN_count;
…
intStock:
Get_N_Count()
{
returnN_count;
}
2、补充:
写出下面程序的运行结果。
注意:
构造函数和析构函数的执行次序、构造函数的初始化表。
#include
classEx
{
public:
Ex(intx,charc='c');
~Ex()
{
cout<<'B'<}
voidoutdata(void)
{
cout<}
private:
intda;
charch;
};
voidmain()
{
Exx(3,'a'),y
(1);
Exz[2]={Ex(10,'a'),Ex(1,'d')};
x.outdata();
y.outdata();
z[0].outdata();
}
Ex:
:
Ex(intx,charc):
da(x),ch(c)
{
cout<<'A'<}
四、分析与讨论:
1、分析总结面向对象程序设计的程序的基本构成方法
2、分析总结类、对象和变量之间的区别与联系
3、类作为程序的基本元素,试分析其优势
实验四继承与派生
一、实验目的和要求
1、理解类的继承的概念,能够定义和使用类的继承关系。
2、掌握派生类的声明与定义方法。
3、熟悉公有派生类和私有派生类的访问特性。
4、学习虚基类在解决二义性问题中的作用。
二、实验内容
1、定义一个基类MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。
2、定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。
3、定义一个类AverArray继承自MyArray,在该类中定义函数Aver实现求解整数的平均值。
4、定义NewArray类,同时继承了SortArray和AverArray类,声明为虚基类,体会虚基类在解决二义性问题中的作用。
三、实验步骤
1、第四个内容提示:
虚基类:
classSortArray:
virtualpublicMyArray
classAverArray:
virtualpublicMyArray
定义虚基类,为了在继承中没有二义性。
2、补充:
运行下面两段程序,体会虚基类的用途
1)
#include
classB
{
public:
intb;
};
classB1:
virtualpublicB
{
private:
intb1;
};
classB2:
virtualpublicB
{
private:
intb2;
};
classC:
publicB1,publicB2
{
private:
intd;
};
voidmain()
{
Cc;
c.B1:
:
b=5;
c.B2:
:
b=10;
cout<<"pathB1==>"<:
b<cout<<"pathB2==>"<<