面向对象程序设计C++实验指导书.docx

上传人:b****5 文档编号:30138894 上传时间:2023-08-05 格式:DOCX 页数:33 大小:166.49KB
下载 相关 举报
面向对象程序设计C++实验指导书.docx_第1页
第1页 / 共33页
面向对象程序设计C++实验指导书.docx_第2页
第2页 / 共33页
面向对象程序设计C++实验指导书.docx_第3页
第3页 / 共33页
面向对象程序设计C++实验指导书.docx_第4页
第4页 / 共33页
面向对象程序设计C++实验指导书.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

面向对象程序设计C++实验指导书.docx

《面向对象程序设计C++实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。

面向对象程序设计C++实验指导书.docx

面向对象程序设计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;i

level(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;i

sum+=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;i

if(element[i]==a)

returntrue;

returnfalse;

}

//往集合中增加一个元素

boolintSet:

:

operator+(inta)

{

if(IsMemberOf(a))

returntrue;

else

{

if(El

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1