面向对象程序设计C++实验指导书.docx
- 文档编号:30138894
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:33
- 大小:166.49KB
面向对象程序设计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;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< 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 C+ 实验 指导书