面向对象程序设计C++实验指导书.docx
《面向对象程序设计C++实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。
面向对象程序设计C++实验指导书
《面向对象程序设计(C++)》课程实验指导书
安阳工学院计算机科学与信息工程学院
软件工程教研室
2014.9
编号:
课程总学时:
64实验学时:
32
课程总学分:
3实验学分:
先修课程:
高级语言程序设计
适用专业:
计算机科学与技术,网络工程,软件工程、软件工程专升本
一、本课程实验的主要目的与任务
《面向对象程序设计(C++)》是计算机专业学生的一门专业基础课。
C++是一种高效而又实用的程序设计语言,它既可以进行过程化程序设计,也可以进行面向对象程序设计,因此成为了编程人员最广泛使用的工具。
主要任务是介绍C++语言中的数据类型,运算,语句结构及其程序设计的基本方法。
使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会利用C++语言学会解决一般应用问题,从而掌握面向对象程序设计的基本知识和基本技能。
并为后续的专业课程奠定程序设计基础。
实验1C++基础知识
一、实验目的
1.加强学生掌握C++的基本知识点;
2.加强学生掌握I/O流;
3加强学生进一步理解函数的用法;
4理解引用的概念及应用。
三、实验内容
1.使用IO流输出语句,分三行输出“MynameisJone\n”,“theIDis”,“2”。
2.分别用浮点、定点和指数方式显示22.0/7的计算结果。
3.分别用16、8、10进制显示输出十进展数1001。
4.分别用显示宽度为2,3,4显示输出21,其中用“*”填充间隔。
5.分别用左对齐、右对齐两种方式显示输出1,2,3三个数。
6.输入圆的半径,计算并输出它的周长和面积。
其中π=3.1415926,使用常量定义π。
7.用函数返回值实现统计A类学生和B类学生个数,平均分大于等于80的为A类,其余为B类。
四.实验指导
1.参考程序:
#include
intmain()
{
cout<<”MynameisJone\n”;
cout<<”theIDis”;
cout<<2;
cout<}
2.参考程序:
#include
#include//要用到格式控制符
voidmain()
{
doubleamount=22.0/7;
cout<cout<<(1)<<(2)<<<cout<:
fixed);
cout<cout<:
scientific)<cout<}
3.参考程序:
#include
#include
intmain()
{
intnumber=1001;
cout<<"Decimal:
"<<<"Hexadecimal:
"<<<"Octal:
"<return0;
}
4.参考程序:
#include
#include
intmain()
{
cout<<(2)<<21<<<cout<return0;
}
5.参考程序:
#include
#include
voidmain()
{
cout<:
right)
<<<cout<:
left)
<<<}
6.参考程序:
#include
voidmain()
{
constfloatPI=3.1415926f;
floatr;
floatz,s;
cout<<"请输入圆的半径r=";
cin>>r;
z=2*PI*r;
s=PI*r*r;
cout<<"圆的周长为:
"<cout<<"圆的面积为:
"<
}
7.参考程序:
#include
usingnamespacestd;
intarray[6][4]={{60,80,90,75},
{75,85,65,77},
{80,88,90,98},
{89,100,78,81},
{62,68,69,75},
{85,85,77,91}};
int&level(intgrade[],intsize,int&tA,int&tB);
intmain()
{
inttypeA=0,typeB=0;
intstudent=6;
intgradesize=4;
for(inti=0;ilevel(array[i],gradesize,typeA,typeB)++;//函数调用作为左值
cout<<"numberoftypeAis"<cout<<"numberoftypeBis"<//system("PAUSE");
return0;
}
int&level(intgrade[],intsize,int&tA,int&tB)
{
intsum=0;
for(inti=0;isum+=grade[i];
sum/=size;//平均分
if(sum>=80)
returntA;//typeAstudent
else
returntB;//typeBstudent
}
运行结果:
实验2类和对象
1、实验目的:
掌握类的定义,根据具体需求设计类;
深入理解C++中类的封装性;
会根据类创建各种对象;
掌握对象的各种成员的使用方法。
2、实验内容
定义一个满足如下要求的Date类。
(1)用下面的格式输出日期:
日/月/年;
(2)可运行在日前上加一天操作;
(3)设置日期。
参考代码:
#include
classDate
{
public:
voidDisplay();
voidAddOneDay();
voidSetDay(inty,intm,intd);
protected:
boolLegal(inty,intm,intd);
boolIsLeapYear(inty);
intyear;
intmonth;
intday;
};
voidDate:
:
Display()
{
cout<}
voidDate:
:
AddOneDay()
{
if(Legal(year,month,day+1))
day++;
elseif(Legal(year,month+1,1))
month++,day=1;
elseif(Legal(year+1,1,1))
day=1,month=1,year++;
}
voidDate:
:
SetDay(inty,intm,intd)
{
if(Legal(y,m,d))
day=d,month=m,year=y;
}
boolDate:
:
Legal(inty,intm,intd)
{
if(y>9999||y<1||d<1||m<1||m>12)
returnfalse;
intdayLimit=31;
switch(m)case4:
case6:
case9:
case11:
dayLimit--;
if(m==2)dayLimit=IsLeapYear(y)?
29:
28;
return(d>dayLimit)?
false:
true;
}
boolDate:
:
IsLeapYear(inty)
{
return!
(y%4)&&(y%100)||!
(y%400);
}
intmain()
{
Dated;
d.SetDay(2010,2,28);
d.Display();
d.AddOneDay();
d.Display();
system("PAUSE");
}
运行结果:
实验三拷贝构造函数
1.实验目的
(1)加强学生理解构造函数、析构函数的概念。
(2)加强学生理解拷贝构造函数必要性。
(3)培养学习运用面向对象的思想解决实际问题的能力。
2.实验内容
(1)设计一个单链表类。
(2)实现单链表的构造函数、析构函数、拷贝构造函数。
(3)实现单链表的插入、删除结点的功能。
(3)设计测试用例,测试所设计的类。
参考代码:
#include
usingnamespacestd;
enumStatus{ERROR=0,OK};
typedefintElemType;
intequal(ElemTypea,ElemTypeb)
{
returna==b;
}
classLinkList
{
public:
classLinkNode
{
public:
ElemTypedata;
LinkNode*next;
};
typedefLinkNode*NodePointer;
voidclear();
voidPrint();
StatusdeleteElem(ElemTypee);
StatusgetElem(inti,ElemType&e);
NodePointergetHead()
{
returnhead;
}
Statusinsert(inti,ElemTypee);
boolisEmpty();
///////////////
LinkList();
~LinkList();
LinkList(constLinkList&otherL);
protected:
NodePointerhead;
};
voidLinkList:
:
Print()
{
NodePointerr;
r=head;
while(r)
{
cout<data<<"";
r=r->next;
}
cout<}
voidLinkList:
:
clear()
{
NodePointerp,q;
p=NULL,q=head;
while(q)
{
p=q;
q=q->next;
deletep;
}
head=NULL;
}
StatusLinkList:
:
deleteElem(ElemTypee)
{
NodePointerr,p;
r=NULL,p=head;
while(p&&!
equal(p->data,e))
{
r=p;
p=p->next;
}
if(p==NULL)
returnERROR;
if(r==NULL)
head=head->next;
else
r->next=p->next;
deletep;
returnOK;
}
StatusLinkList:
:
getElem(inti,ElemType&e)
{
intj=1;
NodePointerp=head;
while(p&&j
{
p=p->next;
++j;
}
if(!
p||j>i)
returnERROR;
e=p->data;
returnOK;
}
StatusLinkList:
:
insert(inti,ElemTypee)
{
intj=1;
NodePointerp=head;
NodePointers;
while(p&&j{
++j;
p=p->next;
}
if(!
p&&head||j>i)
returnERROR;
s=newLinkNode;
assert(s!
=0);
s->data=e;
if(i==1)
{
s->next=head;
head=s;
}
else
{
s->next=p->next;
p->next=s;
}
returnOK;
}
boolLinkList:
:
isEmpty()
{
return(head?
false:
true);
}
LinkList:
:
LinkList()
{
head=NULL;
}
LinkList:
:
~LinkList()
{
clear();
}
LinkList:
:
LinkList(constLinkList&otherL)
{
NodePointerp;
NodePointerop=otherL.head;
NodePointers;
head=p=NULL;
while(op)
{
s=newLinkNode;
assert(s!
=0);
s->data=op->data;
if(!
head)
head=s;
else
p->next=s;
p=s;
op=op->next;
}
if(head)
p->next=NULL;
}
intmain()
{
LinkListlink;
link.insert(1,1);
link.insert(2,3);
link.insert(3,5);
link.insert(4,7);
link.deleteElem(3);
link.Print();
system("PAUSE");
return0;
}
运行结果
实验4继承与多态
1.实验目的
(1)加强学生理解继承与派生的概念。
(2)加强学生理解多态的概念。
(3)培养学生运用类多态性解决问题的能力。
2.实验内容
(1)新建一个基类shape类是一个表示形状的抽象类,area()为求图形面积的函数。
(2)从shape类派出矩形类(rectangle)、三角形类(triangle)、圆类(circles)。
(3)给出各函数具体的求面积函数。
(4)用多态的方法输出各形状的面积。
#include
#include
usingnamespacestd;
classshape
{
public:
virtualdoublearea()=0;
virtualvoiddisplay()=0;
shape(){}
};
classrectangle:
publicshape
{
public:
rectangle(doublea=1,doubleb=1)
{
x=a;
y=b;
}
doublearea()
{
returnx*y;
}
voiddisplay()
{
cout<
}
private:
doublex;
doubley;
};
classtriangle:
publicshape
{
public:
triangle(doublea=1,doubleb=1,doublec=1)
{
x=a;
y=b;
z=c;
}
doublearea()
{
doublel=(x+y+z)/2;
return(sqrt((l-x)*(l-y)*(l-z)*l));
}
voiddisplay()
{
cout<
}
private:
doublex;
doubley;
doublez;
};
classcircles:
publicshape
{
public:
circles(doubleR=1)
{
r=R;
}
doublearea()
{
return3.14*r*r;
}
voiddisplay()
{
cout<
}
private:
doubler;
};
intmain()
{
shape*p;
p=newrectangle(2,3);
p->display();
p=newtriangle(3,4,5);
p->display();
p=newcircles
(2);
p->display();
system("PAUSE");
return0;
}
运行结果:
实验5运算符重载
1、实验目的:
掌握运算符重载的概念及使用方法,掌握特殊运算符的重载要求和方法。
2、实验内容:
定义整数集合类intSet,实现如下功能:
定义类的构造函数,并根据需要可以定义多个构造函数。
(1)Clear函数:
清空整数集合
(2)IsEmpty():
整数集合是否空集;
(3)IsMemberOf():
判断某个整数是否在整数集合内
(4)Operator+:
增加一个整数到整数集合中
(5)Operator-:
从整数集合中删除一个整数元素;
(6)Operator==:
判断两个整数集合是否相等;
(7)Operator*:
求两个整数结合的交集;
(8)Operator+:
求两个整数集合的交集;
(9)Operator=:
整数集合的对象之间的赋值;
(10)Operator<<:
输出整数集合中的元素。
提示:
类intSet可以用数组的方式定义整数集合。
例如:
intelement[200]:
保存整数集合数据;
intElementNum:
指示整数集合的最后一个元素位置
注意:
一个整数集合中不允许有相同元素存在,二是集合中的元素没有顺序。
参考代码:
#include
usingnamespacestd;
classintSet
{
public:
intSet();
intSet(inta[],intsize);
voidClear();
boolIsEmpty();
boolIsMemberOf(inta);
booloperator+(inta);
booloperator-(inta);
booloperator==(intSet&set);
intSetoperator+(intSet&set);
intSetoperator*(intSet&set);
voidoperator=(intSet&set);
friendostream&operator<<(ostream&,intSet&);
protected:
intelement[100];
intElementNum;
};
//初始化整数集合元素
intSet:
:
intSet()
{
for(inti=0;i<100;i++)
element[i]=0;
ElementNum=-1;
}
intSet:
:
intSet(inta[],intsize)
{
if(size>=100)
ElementNum=99;
else
ElementNum=size-1;
for(inti=0;i<=ElementNum;i++)
element[i]=a[i];
for(inti=size;i<100;i++)
element[i]=0;
}
//清空整数集合元素
voidintSet:
:
Clear()
{
for(inti=0;i<100;i++)
{
element[i]=0;
}
ElementNum=-1;
}
//判断整数集合是否为空
boolintSet:
:
IsEmpty()
{
if(ElementNum==-1)
returnfalse;
else
returntrue;
}
//判断元素是否在整数集合中
boolintSet:
:
IsMemberOf(inta)
{
for(inti=0;iif(element[i]==a)
returntrue;
returnfalse;
}
//往集合中增加一个元素
boolintSet:
:
operator+(inta)
{
if(IsMemberOf(a))
returntrue;
else
{
if(El