《面向对象程序设计》实验册Word下载.docx
《《面向对象程序设计》实验册Word下载.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》实验册Word下载.docx(44页珍藏版)》请在冰豆网上搜索。
1.了解VisualC++6.0或者VisualC++2005以上版本的特点。
2.学会VisualC++6.0或者VisualC++2005以上版本的开发环境,来创建和调试标准的C++控制后台应用程序。
3.学会使用VisualC++6.0或者VisualC++2005以上版本的开发环境中的程序调试功能,例如单步执行、设置断点、观察变量值等。
4.掌握string类型的用法。
5.掌握C++语言编程时输入和输出格式控制。
6.掌握多文件结构的使用。
7.掌握重载函数的使用。
二、实验设备和环境
1.计算机每人一台。
2.安装WindowsXP或者以上版本操作系统。
3.安装VisualC++6.0或者VisualC++2005以上版本。
三、实验内容及步骤
1.给出VisualC++调试一个简单应用程序的步骤,要求程序输出字符串“Hello!
WelcometoC++!
”。
程序:
#include<
iostream>
usingnamespacestd;
intmain()
{
cout<
<
"
Hello!
endl;
WelcometoC++!
return0;
}
运行结果:
2.调试以下程序,观察运行结果。
voidmain()
inta,b=10;
int&
ra=a;
a=20;
a<
ra<
&
ra=b;
b<
运行结果及结果分析:
3.编写一程序,实现九九乘法表的2中格式输出,格式如下:
(1)123456789
1123456789
224681012141618
336·
·
448·
5510·
6612·
7714·
8816·
9918·
(2)123456789
11
224
3369
4481216
5510152025
661218243036
77142128354249
8816243240485664
991827364554637281
注:
要求每种输出格式均写成函数形式
#include<
inti,j;
显示1:
for(i=1;
i<
10;
i++)
{
for(j=1;
j<
j++)
{
cout<
i*j<
\t"
;
}
cout<
}
endl<
显示2:
i++)
{
=i;
j++)
{
j*i<
}
}
4.将第3题改成多文件结构实现。
要求该工程中有3个.cpp文件和1个.h文件。
.h:
intcfb1(intx,inty);
intcfb2(intx,inty);
.cpp:
(1)
#include"
3head.h"
cfb1(i,j)<
cfb2(i,j)<
(2)
intcfb1(inti,intj)
(3)
intcfb2(inti,intj)
5.编程实现比较两个数的大小,求较大值(要求使用重载函数实现)。
intmax(inta,intb)
returna>
b?
a:
b;
intm,n;
Entertwointeger:
cin>
>
m>
n;
Thebiggeris:
max(m,n)<
6.编写一个程序,判断一个字符串是否为另一个字符串的子串,若是,返回字串在主串中的位置。
要求不适用strstr函数,自己编写一个子函数实现。
(建议使用string类型,而非字符数组。
)
string.h"
chara[]="
howareyou?
charb[]="
are"
inti=0,j,na,nb,flag;
na=strlen(a);
nb=strlen(b);
flag=1;
for(i=0;
i!
='
\0'
if(a[i]==b[j])j++;
四、实验体会
熟悉了C++开发环境的使用,对C++编程有了初步的了解,能够编写一些简单的和C类似的程序。
类与对象实验学时:
9.25实验成绩:
吴刚批改时间:
1.掌握类和对象的概念、定义方法以及类与对象的简单用法。
2.掌握成员函数的实现与调用方法。
3.深刻领会类与对象的区别。
4.理解类实现数据隐藏和封装的原理。
5.掌握构造函数、拷贝构造函数、分析构造函数的定义和使用,尤其注意组合类中它们的调用顺序。
1.用面向对象的程序设计方法实现栈的操作。
栈又叫堆栈,是一个常用的数据结构,它是一种运算受限的线性表,仅允许在表的一端进行插入和删除运算,是一种后进先出表。
提示:
栈用一维整型数组来表示,栈的大小定义为10;
栈定义为一个类stack;
实现栈的创建、进栈和出栈、栈的消亡。
进栈函数:
voidpush(intn);
出栈函数:
intpop(void);
constintmaxsize=10;
classstack
public:
voidinit()
top=-1;
voidpush(intn);
intpop();
voiddead();
private:
inttop;
intdata[maxsize];
};
voidstack:
:
push(intn)
if(top==maxsize)
栈已满!
else
top++;
data[top]=n;
intstack:
pop()
if(top<
0)
栈下溢!
return0;
top--;
returndata[top+1];
dead()
栈中还剩"
(top+1)<
个元素"
stackseqstack;
inti,x,m;
seqstack.init();
请输入10个数字:
maxsize;
cin>
x;
seqstack.push(x);
请输入你所需要的操作:
1<
元素出栈!
2<
栈的消亡!
m;
switch(m)
case1:
{
for(i=0;
cout<
seqstack.pop();
break;
}
case2:
seqstack.dead();
return0;
2.将第1题中的实验内容改为多文件结构实现。
#defineN10
staticinttop;
inta[N];
voidpush(intn);
voidpop();
voiddie();
head.h>
top=0;
if(top<
N)
a[top++]=n;
cout<
进栈数据:
n<
else
堆栈已经满了,不能再加数进去了!
=0)
堆栈已经空了,没有数据了!
出栈数据:
a[--top]<
die()
inti;
for(i=0;
N;
a[i]=0;
消亡堆栈!
head.h"
intn,m;
输入两个你要输入的数据N和M:
cin>
n>
stacks;
s.push(n);
s.push(m);
s.pop();
s.die();
3.设计一个用于人事管理的People(人员)类。
考虑到通用性,这里只抽象出所有类型人员都具有的属性:
number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
构造函数和折构函数、拷贝构造函数、内联成员函数、组合类等。
string>
classDate
intyear;
intmonth;
intday;
Date(){}
Date(inty,intm,intd)
year=y;
month=m;
day=d;
voidset()
year>
month>
day;
voiddisplay()
year<
年"
month<
月"
day<
日"
classPerson
intnum;
charsex;
Datebirthday;
charID[18];
Person(){}
Person(intn,inty,intm,intd,charid[18],chars='
m'
):
birthday(y,m,d)
num=n;
sex=s;
strcpy(ID,id);
Person(Person&
p)
num=p.num;
sex=p.sex;
birthday=p.birthday;
strcpy(ID,p.ID);
voidinput()
录入数据:
编号:
num;
性别(m/f):
sex;
生日:
birthday.set();
身份证号:
ID;
ID[18]='
voidoutput()
num<
性别:
sex<
birthday.display();
ID<
~Person()
"
号人员已经录入"
Personp1;
p1.input();
p1.output();
4.设计一个计算薪水的类Payroll,它的数据成员包括:
单位小时的工资、已经工作的小时数、本周应付工资数。
在主函数定义一个具有10个元素的对象数组(代表10个雇员)(可以定义普通对象数组,也可以定义堆对象数组)。
程序询问每个雇员本周已经工作的小时数,然后显示应得的工资。
要求:
输入有效性检验:
每个雇员每周工作的小时数不能大于60,同时也不能为负数。
string.h>
stdio.h>
classPayroll
doublemoney;
doubletotal;
inttime;
intGetTime()
do
printf("
inputtime:
);
scanf("
%d"
&
time);
while(time<
0&
time>
60);
money=100;
intGetTotalMoney()
return(total=time*money);
voidPrint()
printf("
total:
%lf\n"
total);
main()
Payrollp[10];
p[0].GetTime();
p[0].GetTotalMoney();
p[0].Print();
对多文件有了更深了解,能够熟练的掌握多文件的使用方法。
学习了C++的构造函数,以及拷贝构造函数,接触友元组合类等新知识,需要课后多加练习。
静态成员与友元实验学时:
无实验地点:
10.09实验成绩:
吴刚批改时间:
1.掌握类中静态成员的定义的方法。
2.掌握静态数据成员初始化的方法。
3.掌握静态数据成员和数据函数成员的访问和使用方法。
4.掌握友元函数的定义和使用方法。
5.了解友元类的使用方法。
1.任意输入10个数,计算器总和及平均值。
设计程序测试该功能(要求用类、静态友员实现)。
classnumber
intNo;
intfigure;
staticdoublesum;
staticintsumpeople;
number(intn,intifigure)
No=n;
figure=ifigure;
sum+=figure;
sumpeople++;
staticintSum()
returnsum;
staticdoubleAverage()
returnsum/sumpeople;
intnumber:
sumpeople=0;
doublenumber:
sum=0;
Thetennumberis:
=10;
j;
number(i,j);
Thesumis:
number:
Sum()<
Theaverageis:
Average()<
2.求两点之间的距离(要求定义点Point类,并用友员函数实现)。
cmath>
classPoint
doublex,y;
Point(doublem,doublen):
x(m),y(n){}
frienddoubleDistance(Point&
px,Point&
py);
doubleDistance(Point&
py)
doubled;
d=sqrt((px.x-py.x)*(px.x-py.x)+(px.y-py.y)*(px.y-py.y));
returnd;
Pointp1,p2;
inta1,b1,a2,b2;
a1>
b1>
a2>
b2;
p1=Point(a1,b1);
p2=Point(a2,b2);
thedistanceis"
Distance(p1,p2)<
3.定义一个经理类Manager,其成员数据包括编号id,姓名name和年龄age,均声明为private访问属性。
再定义一个员工类Employee,其成员数据及访问属性与经理类相同。
将Manager类声明为Employee类的友员函数,并在Manager类中定义一个函数访问Employee类的私有数据成员并进行输出。
stdlib.h>
classEmployee
friendclassManager;
private:
intid;
char*n;
intage;
Employee()
id=1;