收藏 分销(赏)

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

上传人:二*** 文档编号:4581434 上传时间:2024-09-30 格式:DOC 页数:34 大小:228.04KB
下载 相关 举报
2023年面向对象程序设计C++实验指导书.doc_第1页
第1页 / 共34页
本文档共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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服