版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。《面向对象程序设计(C++)》课程实验指导书安阳工学院计算机科学与信息工程学院软件工程教研室.9编号:课程总学时:64实验学时:32课程总学分:3.5实验学分:先修课程:C语言程序设计适用专业:计算机科学与技术,网络工程,软件工程本课程实验的主要目的与任务《面向对象程序设计(C++)》是计算机专业学生的一门专业基础课。C++是一种高效而又实用的程序设计语言,它既能够进行过程化程序设计,也能够进行面向对象程序设计,因此成为了编程人员最广泛使用的工具。主要任务是介绍C++语言中的数据类型,运算,语句结构及其程序设计的基本方法。使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会利用C++语言学会解决一般应用问题,从而掌握面向对象程序设计的基本知识和基本技能。并为后续的专业课程奠定程序设计基础。实验1C++基础一、实验目的1.加强学生掌握C++的基本知识点;2.加强学生掌握I/O流;3加强学生进一步理解函数的用法;4理解引用的概念及应用。三、实验内容1.用函数返回值实现统计A类学生和B类学生个数,平均分大于等于80的为A类,其余为B类。四.实验指导1.参考程序:#include<iostream.h>intmain(){cout<<”MynameisJone\n”;cout<<”theIDis”;cout<<2;cout<<endl;}2.参考程序:#include<iostream.h>#include<iomanip.h>//要用到格式控制符voidmain(){doubleamount=22.0/7;cout<<amount<<endl;cout<<setprecision(0)<<amount<<endl<<setprecision(1)<<amount<<endl<<setprecision(2)<<amount<<endl<<setprecision(3)<<amount<<endl<<setprecision(4)<<amount<<endl;cout<<setiosflags(ios::fixed);cout<<setprecision(8)<<amount<<endl;cout<<setiosflags(ios::scientific)<<amount<<endl;cout<<setprecision(6);//重新设置成原默认设置}3.参考程序:#include<iostream.h>#include<iomanip.h>intmain(){intnumber=1001;cout<<"Decimal:"<<dec<<number<<endl<<"Hexadecimal:"<<hex<<number<<endl<<"Octal:"<<oct<<number<<endl;return0;}4.参考程序:#include<iostream.h>#include<iomanip.h>intmain(){cout<<setfill('*')<<setw(2)<<21<<endl<<setw(3)<<21<<endl<<setw(4)<<21<<endl;cout<<setfill('');//恢复默认设置return0;}5.参考程序:#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setiosflags(ios::right)<<setw(5)<<1<<setw(5)<<2<<setw(5)<<3<<endl;cout<<setiosflags(ios::left)<<setw(5)<<1<<setw(5)<<2<<setw(5)<<3<<endl;}6.参考程序:#include<iostream.h>voidmain(){ constfloatPI=3.1415926f; floatr; floatz,s; cout<<"请输入圆的半径r="; cin>>r; z=2*PI*r; s=PI*r*r; cout<<"圆的周长为:"<<z<<endl; cout<<"圆的面积为:"<<s<<endl;}7.参考程序:#include<iostream>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<student;i++)//处理所有的学生level(array[i],gradesize,typeA,typeB)++;//函数调用作为左值cout<<"numberoftypeAis"<<typeA<<endl;cout<<"numberoftypeBis"<<typeB<<endl;//system("PAUSE");return0;}int&level(intgrade[],intsize,int&tA,int&tB){intsum=0;for(inti=0;i<size;i++)//成绩总分sum+=grade[i];sum/=size;//平均分if(sum>=80)returntA;//typeAstudentelsereturntB;//typeBstudent}运行结果:实验2类和对象1、实验目的:掌握类的定义,根据具体需求设计类;深入理解C++中类的封装性;会根据类创立各种对象;掌握对象的各种成员的使用方法。2、实验内容定义一个满足如下要求的Date类。(1)用下面的格式输出日期:日/月/年;(2)可运行在日前上加一天操作;(3)设置日期。参考代码:#include<iostream.h>classDate{public:voidDisplay();voidAddOneDay();voidSetDay(inty,intm,intd);protected:boolLegal(inty,intm,intd);boolIsLeapYear(inty);intyear;intmonth;intday;};voidDate::Display(){cout<<day<<"/"<<month<<"/"<<year<<endl;}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(,2,28);d.Display();d.AddOneDay();d.Display();system("PAUSE");}运行结果:实验3继承与派生1、实验目的:理解继承的概念,学习如何使用基类成员,了解基类成员在派生类中的访问控制;理解类的派生对代码复用的作用。2、实验内容:设计一个人员类person和一个日期类date,由人员类派生出学生类Student和教师类professor,学生类和教师类的数据成员birthday为日期类。参考代码:#include<string>#include<iostream>usingnamespacestd;classdate{public:date(){cout<<"Birthday:";cin>>year>>month>>day;}voiddisplay(){cout<<year<<"-"<<month<<"-"<<day;}private:intyear;intmonth;intday;};classperson{protected:char*name;public:person();};person::person(){charnamestr[50];cout<<"Name:";cin>>namestr;name=newchar[strlen(namestr)+1];strcpy(name,namestr);}classstudent:publicperson{private:intID;intscore;datebirthday;public:student(){cout<<"studentID:";cin>>ID;cout<<"studentscore:";cin>>score;}voiddisplay(){cout<<"Thebasicinformation:"<<endl;cout<<ID<<"\t"<<name<<"\t"<<score<<"\t";birthday.display();cout<<endl;}};classprofessor:publicperson{public:professor(){cout<<"TeacherID:";cin>>No;cout<<"schoolteachingmajor:";cin>>major;}voiddisplay(){cout<<"Thebasicinformation:"<<endl;cout<<"\t"<<No<<"\t"<<name<<"\t"<<major<<"\t";birthday.display();cout<<endl;}private:intNo;charmajor[10];datebirthday;};intmain(){studentstu;stu.display();professorprof;prof.display();system("PAUSE");return0;}运行结果:实验4多态1、实验目的:掌握函数的概念及应用方法;理解多态性的运用和作用。2、实验内容:新建一个基类shape类是一个表示形状的抽象类,area()为求图形面积的函数。请从shape类派出矩形类(rectangle)、三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。参考代码:#include<iostream>#include<math.h>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<<area()<<endl;;}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<<area()<<endl;;}private:doublex;doubley;doublez;};classcircles:publicshape{public:circles(doubleR=1){r=R;}doublearea(){return3.14*r*r;}voiddisplay(){cout<<area()<<endl;;}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<iostream>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<ElementNum;i++) if(element[i]==a) returntrue; returnfalse;}//往集合中增加一个元素boolintSet::operator+(inta){ if(IsMemberOf(a)) returntrue; else { if(ElementNum==99) returnfalse; else { ElementNum++; element[ElementNum]=a; returntrue; } }}//从集合中删除一个元素boolintSet::operator-(inta){ intpos; if(!IsMemberOf(a)) returnfalse; for(inti=0;i<=ElementNum;i++) { if(element[i]==a) { pos=i; break; } } for(inti=pos;i<ElementNum;i++) element[i]=element[i+1]; ElementNum--; returntrue;}//判断两个整数集合是否相等boolintSet::operator==(intSet&set){ boolEqual; if(ElementNum!=set.ElementNum) returnfalse; for(inti=0;i<=ElementNum;i++) { Equal=false; for(intj=0;j<set.ElementNum;j++) { if(element[i]==set.element[i]) { Equal=true; break; } } if(!Equal) returnfalse; } returntrue;}//求两个集合的交集intSetintSet::operator+(intSet&set){ inta[100],size=0; for(inti=0;i<=ElementNum;i++) for(intj=0;j<=set.ElementNum;j++) { if(element[i]==set.element[j]) { a[size]=element[i]; size++; break; } } returnintSet(a,size);}//求两个集合的并集intSetintSet::operator*(intSet&set){ inta[100],size; for(inti=0;i<=ElementNum;i++) a[i]=element[i]; size=ElementNum+1; for(inti=0;i<=set.ElementNum;i++) if(IsMemberOf(set.element[i])) continue; else { if(size==99) break; a[size]=set.element[i]; size++; }returnintSet(a,size);}//整数集合对象间赋值voidintSet::operator=(intSet&set){ for(inti=0;i<=set.ElementNum;i++) element[i]=set.element[i]; ElementNum=set.ElementNum;}//输出整数集合中的元素ostream&operator<<(ostream&os,intSet&s){ for(inti=0;i<=s.ElementNum;i++) os<<"element["<<i<<"]"<<s.element[i]<<endl; returnos;}intmain(){ inta[7]={1,2,3,4,5,6,7}; intb[6]={5,6,7,8,9,0}; intSetS1(a,7),S2(b,6),S3;S3=S1+S2;cout<<S3;system("PAUSE"); return0;}运行结果:实验6输入输出流1、实验目的:掌握流的概念;掌握文件的打开与关闭;掌握文件的读写操作;2、实验内容:定义一个学生类,包含学生的学号、姓名和成绩等基本信息,将学生信息写入二进制文件student.dat中,实现对学生信息的显示、查询和删除等基本功能。参考代码:#include<iostream>#include<fstream>usingnamespacestd;classStudent{private:longNo;char*Name;intScore;public:Student(longstu_no=0,char*stu_name=NULL,intstu_score=0);longGetNo();char*GetName();intGetScore();voidShowStudent();};Student::Student(longstu_no,char*stu_name,intstu_score){No=stu_no;Name=stu_name;Score=stu_score;}voidStudent::ShowStudent(){cout<<No<<"\t"<<Name<<"\t"<<Score<<endl;}longStudent::GetNo(){returnNo;}char*Student::GetName(){returnName;}intStudent::GetScore(){returnScore;}intmain(){Studentstu[3]={Student(07001,"Liming",70),Student(07002,"Hujun",80),Student(07003,"Wangtian",90)};inti,k,pos;fstreaminfile,outfile;outfile.open("Students.dat",ios::out|ios::binary|ios::trunc);if(!outfile){cerr<<"Fileopenerror!"<<endl;exit(1);}for(i=0;i<3;i++){outfile.write((char*)&stu[i],sizeof(stu[i]));}outfile.close();cout<<"Students.dat:"<<endl;infile.open("Students.dat",ios::in|ios::binary);for(i=0;i<3;i++){infile.read((char*)&stu[i],sizeof(Student));cout<<stu[i].GetNo()<<"\t"<<stu[i].GetName()<<"\t"<<stu[i].GetScore()<<endl;}infile.close();infile.open("Students.dat",ios::in|ios::binary);cout<<"pleaseinputthenumberofrecord:";cin>>k;pos=(k-1)*sizeof(Student);infile.seekg(pos);infile.read((char*)&stu[i],sizeof(Student));cout<<stu[i].GetNo()<<"\t"<<stu[i].GetName()<<"\t"<<stu[i].GetScore()<<endl;infile.close();cout<<"DeletetheSecondrecord!"<<endl;infile.open("Students.dat",ios::in|ios::binary|ios::trunc);for(i=0;i<3;i++){if(i!=1)outfile.write((char*)&stu[i],sizeof(stu[i]));}outfile.close();infile.open("Students.dat",ios::in|ios::binary);for(i=0;i<2;i++){infile.read((char*)&st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国柔性插座行业头部企业市场占有率及排名调研报告
- 2025年全球及中国FTTR全光组网解决方案行业头部企业市场占有率及排名调研报告
- 医疗用地居间合同样本
- 图书出版居间合同协议书版
- 农产品销售居间合同解除
- 摄影棚装修合同终止
- 电商仓库搬迁合同样本
- 教育机构装修保修合同条款
- 二手房买卖贷款合同
- 新材料研发合作项目启动协议
- 纪委办案安全培训课件
- 超市连锁行业招商策划
- 医药高等数学智慧树知到课后章节答案2023年下浙江中医药大学
- 城市道路智慧路灯项目 投标方案(技术标)
- 初中英语-Unit2 My dream job(writing)教学设计学情分析教材分析课后反思
- 【公司利润质量研究国内外文献综述3400字】
- 工行全国地区码
- 新疆2022年中考物理试卷及答案
- 地暖工程监理实施细则
- 顶部板式吊耳计算HGT-20574-2018
- 《内证观察笔记》
评论
0/150
提交评论