2023年面向对象程序设计C++实验指导书.doc
《2023年面向对象程序设计C++实验指导书.doc》由会员分享,可在线阅读,更多相关《2023年面向对象程序设计C++实验指导书.doc(34页珍藏版)》请在咨信网上搜索。
《面向对象程序设计(C++)》课程实验指导书 安阳工学院计算机科学与信息工程学院 软件工程教研室 2023.9 编 号: 课程总学时: 64 实验学时: 32 课程总学分: 3.5 实验学分: 先修课程:C语言程序设计 合用专业:计算机科学与技术,网络工程,软件工程 一、 本课程实验的重要目的与任务 《面向对象程序设计(C++)》是计算机专业学生的一门专业基础课。C++是一种高效而又实用的程序设计语言,它既可以进行过程化程序设计,也可以进行面向对象程序设计,因此成为了编程人员最广泛使用的工具。重要任务是介绍C++语言中的数据类型,运算,语句结构及其程序设计的基本方法。使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会运用C++语言学会解决一般应用问题,从而掌握面向对象程序设计的基本知识和基本技能。并为后续的专业课程奠定程序设计基础。 实验1 C++基础 一、实验目的 1.加强学生掌握C++的基本知识点; 2.加强学生掌握I/O流; 3 加强学生进一步理解函数的用法; 4 理解引用的概念及应用。 三、实验内容 1.用函数返回值实现记录A类学生和B类学生个数,平均分大于等于80的为A类,其余为B类。 四. 实验指导 1.参考程序: #include<iostream.h> int main() { cout<<”My name is Jone\n”; cout<<”the ID is”; cout<<2; cout<<endl; } 2.参考程序: #include <iostream.h> #include <iomanip.h> //要用到格式控制符 void main() { double amount = 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> int main() { int number=1001; cout <<"Decimal:" <<dec <<number <<endl <<"Hexadecimal:" <<hex <<number <<endl <<"Octal:" <<oct <<number <<endl; return 0; } 4.参考程序: #include <iostream.h> #include <iomanip.h> int main() { cout <<setfill('*') <<setw(2) <<21 <<endl <<setw(3) <<21 <<endl <<setw(4) <<21 <<endl; cout <<setfill(' '); // 恢复默认设立 return 0; } 5.参考程序: #include <iostream.h> #include <iomanip.h> void main() { 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> void main() { const float PI=3.1415926f; float r; float z,s; cout<<"请输入圆的半径r="; cin>>r; z=2*PI*r; s=PI*r*r; cout<<"圆的周长为: "<<z<<endl; cout<<"圆的面积为: "<<s<<endl; } 7.参考程序: #include <iostream> using namespace std; int array[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(int grade[], int size, int& tA, int& tB); int main() { int typeA=0,typeB=0; int student=6; int gradesize=4; for(int i=0; i<student; i++) //解决所有的学生 level(array[i], gradesize, typeA, typeB)++; //函数调用作为左值 cout <<"number of type A is " <<typeA <<endl; cout <<"number of type B is " <<typeB <<endl; //system("PAUSE"); return 0; } int& level(int grade[], int size,int& tA, int& tB) { int sum=0; for(int i=0; i<size; i++) //成绩总分 sum+=grade[i]; sum/=size; //平均分 if(sum>=80) return tA; //type A student else return tB; //type B student } 运营结果: 实验2 类和对象 1、实验目的: 掌握类的定义,根据具体需求设计类; 进一步理解C++中类的封装性; 会根据类创建各种对象; 掌握对象的各种成员的使用方法。 2、实验内容 定义一个满足如下规定的Date类。 (1)用下面的格式输出日期:日/月/年; (2)可运营在日前上加一天操作; (3)设立日期。 参考代码: #include <iostream.h> class Date { public: void Display(); void AddOneDay(); void SetDay(int y,int m,int d); protected: bool Legal(int y, int m, int d); bool IsLeapYear(int y); int year; int month; int day; }; void Date::Display() { cout <<day <<"/" <<month <<"/" <<year <<endl; } void Date::AddOneDay() { if(Legal(year,month,day+1)) day++; else if(Legal(year,month+1,1)) month++,day=1; else if(Legal(year+1,1,1)) day=1,month=1,year++; } void Date::SetDay(int y, int m, int d) { if(Legal(y,m,d)) day=d, month=m, year=y; } bool Date::Legal(int y, int m, int d) { if(y>9999||y<1||d<1||m<1||m>12) return false; int dayLimit=31; switch(m) case 4: case 6: case 9: case 11: dayLimit--; if(m==2) dayLimit = IsLeapYear(y) ? 29 : 28; return (d>dayLimit)? false : true; } bool Date::IsLeapYear(int y) { return !(y%4)&&(y%100)||!(y%400); } int main() { Date d; d.SetDay(2023,2,28); d.Display(); d.AddOneDay(); d.Display(); system("PAUSE"); } 运营结果: 实验3 继承与派生 1、实验目的: 理解继承的概念,学习如何使用基类成员,了解基类成员在派生类中的访问控制; 理解类的派生对代码复用的作用。 2、实验内容: 设计一个人员类person和一个日期类date,由人员类派生出学生类Student和教师类professor,学生类和教师类的数据成员birthday为日期类。 参考代码: #include <string> #include <iostream> using namespace std; class date { public: date() { cout<<"Birthday:"; cin>>year>>month>>day; } void display() { cout<<year<<"-"<<month<<"-"<<day; } private: int year; int month; int day; }; class person { protected: char *name; public: person(); }; person::person() { char namestr[50]; cout<<"Name:"; cin>>namestr; name = new char[strlen(namestr)+1]; strcpy(name,namestr); } class student:public person { private: int ID; int score; date birthday; public: student() { cout<<"student ID:"; cin>>ID; cout<<"student score:"; cin>>score; } void display() { cout<<"The basic information:"<<endl; cout<<ID<<"\t"<<name<<"\t"<<score<<"\t"; birthday.display(); cout<<endl; } }; class professor:public person { public: professor() { cout<<"Teacher ID:"; cin>>No; cout<<"schoolteaching major:"; cin>>major; } void display() { cout<<"The basic information:"<<endl; cout<<"\t"<<No<<"\t"<<name<<"\t"<<major<<"\t"; birthday.display(); cout<<endl; } private: int No; char major[10]; date birthday; }; int main() { student stu; stu.display(); professor prof; prof.display(); system("PAUSE"); return 0; } 运营结果: 实验4多态 1、实验目的: 掌握函数的概念及应用方法; 理解多态性的运用和作用。 2、实验内容: 新建一个基类shape类是一个表达形状的抽象类,area( )为求图形面积的函数。请从shape类派出矩形类(rectangle)、三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。 参考代码: #include<iostream> #include<math.h> using namespace std; class shape { public: virtual double area()=0; virtual void display() = 0; shape(){} }; class rectangle:public shape { public: rectangle(double a =1,double b=1) { x = a; y = b; } double area() { return x*y; } void display() { cout<<area()<<endl;; } private: double x; double y; }; class triangle:public shape { public: triangle(double a =1,double b =1,double c=1) { x = a; y = b; z= c; } double area() { double l = (x+y+z)/2; return (sqrt((l-x)*(l-y)*(l-z)*l)); } void display() { cout<<area()<<endl;; } private: double x; double y; double z; }; class circles:public shape { public: circles(double R =1) { r =R; } double area() { return 3.14*r*r; } void display() { cout<<area()<<endl;; } private: double r; } ; int main() { shape *p ; p = new rectangle(2,3); p->display(); p = new triangle(3,4,5); p->display(); p = new circles(2); p->display(); system("PAUSE"); return 0; } 运营结果: 实验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可以用数组的方式定义整数集合。例如: int element[200]:保存整数集合数据; int ElementNum: 指示整数集合的最后一个元素位置 注意:一个整数集合中不允许有相同元素存在,二是集合中的元素没有顺序。 参考代码: #include<iostream> using namespace std; class intSet { public: intSet(); intSet(int a[],int size); void Clear(); bool IsEmpty(); bool IsMemberOf(int a); bool operator+(int a); bool operator-(int a); bool operator==(intSet & set); intSet operator+(intSet &set); intSet operator *(intSet &set); void operator = (intSet &set); friend ostream &operator<<(ostream &,intSet&); protected: int element[100]; int ElementNum; }; //初始化整数集合元素 intSet::intSet() { for(int i = 0; i< 100; i++) element[i] = 0; ElementNum = -1; } intSet::intSet(int a[],int size) { if(size>=100) ElementNum = 99; else ElementNum = size -1; for(int i = 0;i<=ElementNum; i++) element[i] = a[i]; for(int i =size; i<100;i++) element[i ] = 0; } //清空整数集合元素 void intSet::Clear() { for(int i = 0;i<100;i++) { element[i] = 0; } ElementNum = -1; } //判断整数集合是否为空 bool intSet::IsEmpty() { if(ElementNum == -1) return false; else return true; } //判断元素是否在整数集合中 bool intSet::IsMemberOf(int a) { for(int i= 0;i<ElementNum ; i++) if(element[i] == a) return true; return false; } //往集合中增长一个元素 bool intSet::operator +(int a) { if(IsMemberOf(a)) return true; else { if(ElementNum == 99) return false; else { ElementNum++; element[ElementNum] = a; return true; } } } //从集合中删除一个元素 bool intSet::operator -(int a) { int pos; if(!IsMemberOf(a)) return false; for(int i = 0;i<=ElementNum;i++) { if(element[i]==a) { pos= i; break; } } for(int i = pos; i<ElementNum;i++) element[i] = element[i+1]; ElementNum--; return true; } //判断两个整数集合是否相等 bool intSet::operator ==(intSet & set) { bool Equal; if(ElementNum!=set.ElementNum) return false; for(int i = 0;i<=ElementNum;i++) { Equal = false; for(int j = 0;j<set.ElementNum;j++) { if(element[i]==set.element[i]) { Equal = true; break; } } if(!Equal) return false; } return true; } //求两个集合的交集 intSet intSet::operator +(intSet&set) { int a[100],size = 0; for(int i = 0;i<=ElementNum;i++) for(int j = 0;j<=set.ElementNum;j++) { if(element[i]==set.element[j]) { a[size] = element[i]; size++; break; } } return intSet(a,size); } //求两个集合的并集 intSet intSet::operator *(intSet &set) { int a[100],size; for(int i = 0;i<=ElementNum;i++) a[i] = element[i]; size = ElementNum +1; for(int i= 0;i<=set.ElementNum;i++) if(IsMemberOf(set.element[i])) continue; else { if(size == 99) break; a[size] = set.element[i]; size++; } return intSet(a,size); } //整数集合对象间赋值 void intSet::operator =(intSet & set) { for(int i=0;i<=set.ElementNum;i++) element[i] = set.element[i]; ElementNum = set.ElementNum; } //输出整数集合中的元素 ostream & operator<<(ostream &os,intSet &s) { for(int i=0;i<=s.ElementNum;i++) os<<"element["<<i<<"]"<<s.element[i]<<endl; return os; } int main() { int a[7] = {1,2,3,4,5,6,7}; int b[6] ={5,6,7,8,9,0}; intSet S1(a,7),S2(b,6),S3; S3 = S1+S2; cout<<S3; system("PAUSE"); return 0; } 运营结果: 实验6 输入输出流 1、实验目的: 掌握流的概念; 掌握文献的打开与关闭; 掌握文献的读写操作; 2、实验内容: 定义一个学生类,包含学生的学号、姓名和成绩等基本信息,将学生信息写入二进制文献student.dat中,实现对学生信息的显示、查询和删除等基本功能。 参考代码: #include<iostream> #include<fstream> using namespace std; class Student { private: long No; char *Name; int Score; public: Student(long stu_no=0,char*stu_name=NULL,int stu_score=0); long GetNo(); char *GetName(); int GetScore(); void ShowStudent(); }; Student::Student(long stu_no,char *stu_name,int stu_score) { No= stu_no; Name = stu_name; Score = stu_score; } void Student::ShowStudent() { cout<<No<<"\t"<<Name<<"\t"<<Score<<endl; } long Student::GetNo() { return No; } char *Student::GetName() { return Name; } int Student::GetScore() { return Score; } int main() { Student stu[3]={Student(,"Li ming",70), Student(,"Hu jun",80), Student(,"Wang tian",90)}; int i,k,pos; fstream infile,outfile; outfile.open("Students.dat",ios::out|ios::binary|ios::trunc); if(!outfile) { cerr<<"File open error!"<<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<<"please input the number of record:"; 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<<"Delete the Second record!"<<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*)&stu[i],sizeof(Student)); cout<<stu[i].GetNo()<<"\t"<<stu[i].GetName()<<"\t"<<stu[i].GetScore()<<endl; } infile.close(); system("PAUSE"); return 0; } 运营结果: 实验7 模板—求和类模板 1、实验目的: 掌握C++中类模板的使用方法; 2、实验内容: 设计一个类模板template<class T>,用于对T类型的数组停止求一切元素的和、查找指定的元素能否存在,假如存在,则返回其所在数组元素的下标值,否则返回-1 参考代码: #include <iostream> #include <assert.h> using namespace std; template <typename T> class CArray { private: T *m_pArray;//成员变量为动态数组的起始指针 int m_nArraySize; public: CArray(int siz- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 面向 对象 程序设计 C+ 实验 指导书
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文