c++类和对象实验报告
实验一类和对象
实验课程名:面向对象程序设计(C++)
专业班级:学号:姓名:
实验时间:实验地点:指导教师:
一、实验目的和要求
(1) 理解类和对象的概念,掌握声明类和定义对象的方法。
(2) 掌握构造函数和析构函数的实现方法。
(3) 初步掌握使用类和对象编制C++程序。
(4) 掌握对象数组、对象指针和string类的使用方法。
(5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。
(6) 掌握类对象作为成员的使用方法。
(7) 掌握静态数据成员和静态成员函数的使用方法。
(8) 理解友元的概念和掌握友元的使用方法。
二、实验内容
1.设计一个静态数组存储结构的顺序表类,要
求编程实现如下任务:建立一个线性表,首先
依次输人数据元素1,2,3,…,10,然后删除
数据元素6,最后依次显示当前线性表中的数
据元素。要求采用顺序表实现,假设该顺序表
的数据元素个数在最坏情况下不会超过50个。实验代码:#include
using namespace std;
const int MaxSize=100; //100只是示例性的数据,可根据实际问题具体定义
template
class SeqList
{
public:
SeqList( ) {length=0;} //无参构造函数
SeqList(T a[ ], int n); //有参构造函数
~SeqList( ) { } //析构函数为空
int Length( ) {return length;} //求线性表的长度 T Get(int i); //按位查找,取线性表的第i个元素
int Locate(T x ); //按值查找,求线性表中值为x的元素序号
void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素
T Delete(int i); //删除线性表的第i个元素 void PrintList( ); //遍历线性表,按序号依次输出各元素
private:
T data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
template
SeqList
{
int i;
if (n>MaxSize) throw "参数非法";
for (i=0; i data[i]=a[i]; length=n; } template T SeqList { if (i<1 && i>length) throw "查找位置非法"; else return data[i-1]; } template int SeqList { int i; for (i=0; i if (data[i]==x) return i+1; //下标为i的元素等于x,返回其序号i+1 return 0; //退出循环,说明查找失败 } template void SeqList { int j; if (length>=MaxSize) throw "上溢"; if (i<1 || i>length+1) throw "位置"; for (j=length; j>=i; j--) data[j]=data[j-1]; //注意第j个元素存在数组下标为j-1处 data[i-1]=x; length++; } template T SeqList { T x; int j; if (length==0) throw "下溢"; if (i<1 || i>length) throw "位置"; x=data[i-1]; for (j=i; j data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标 length--; return x; } template void SeqList { int i; for(i=0;i cout< cout< } int main() { int m,n,t; int a[10]={0,1,2,3,4,5,6,7,8,9}; SeqList SeqList p=&seq; cout<<"线性表的长度为:"< p->PrintList(); cout<<"请输入要查找元素的位置:"< cin>>n; cout<<"您所要找的元素为:"< cout<<"请输入要查找的元素值:"< cin>>n; cout<<"该值所在的位置为:"< cout<<"请分别输入插入位置与要插入的元素"< cin>>n>>t; p->Insert(n,t); p->PrintList(); cout<<"请输入要删除的元素所在的位置:"< cin>>n; p->Delete(n); p->PrintList(); return 0; } 运行结果: 2.设计一个带头结点的单链表类,要求: (1)生成一个整数线性表,实现将其分解成两个链表, 其中一个全部为奇数,另一个全部为偶数(尽量利 用已知的存储空间)。 (2)设计一个测试主函数,实际运行验证所设计单链表类的正确性。 实验代码:#include using namespace std; template struct Node { T data; Node }; template class LinkList { public: LinkList( ){first=new Node LinkList(T a[ ], int n); //建立有n个元素的单链表~LinkList( ); //析构函数 int Length( ); //求单链表的长度 T Get(int i); //取单链表中第i个结点的元素值 int Locate(T x); //求单链表中值为x的元素序号void Insert(int i, T x); //在单链表中第i个位置插入元素值为x的结点 T Delete(int i); //在单链表中删除第i个结点void PrintList( ); //遍历单链表,按序号依次输出各元素 Node }; template LinkList { int i; Node first=new Node first->next=NULL; //初始化一个空链表 for (i=n-1; i>=0; i--) { s=new Node s->next=first->next; //插入到头结点之后 first->next=s; } } template LinkList { Node p=first; while(p) { q=p; p=p->next; delete q; } } template int LinkList { int i=0; Node p=first; while(p) { p=p->next; i++; } return i-1; } template T LinkList { int n=0; Node p=first; while(p&&i>n) { p=p->next; n++; } return p->data; } template int LinkList { int i; Node p=first; for(i=0;p;i++) { if(p->data==x) return i; p=p->next; } } template void LinkList { Node p=first->next; while(p) { cout< p=p->next; } cout< } template void LinkList { int n=0; Node p=first; while(p&&n { p=p->next; ++n; } q=new Node q->data=x; q->next=p->next; p->next=q; } template T LinkList int n=0; Node p=first; while(p->next&&n { p=p->next; ++n; } q=p->next; p->next=q->next; return q->data; delete q; } int main() { Node int a[10]={0,1,2,3,4,5,6,7,8,9}; LinkList cout< p=L1.first->next,q=L2.first,r=L3.first; L2.first=new Node L2.first->next=NULL; L3.first=new Node L3.first->next=NULL; while(p)//当链表L1中有元素时进行循环 { if(p->data%2==0)//当L1中的元素为偶数时插入L2 { q=new Node q->data=p->data; q->next=L2.first->next; L2.first->next=q; } else { r=new Node r->data=p->data; r->next=L3.first->next; L3.first->next=r; } p=p->next; } L1.PrintList( ); L2.PrintList( ); L3.PrintList( ); cout<<"链表的长度为:"< cout<<"链表的第四个元素为:"< cout<<"链表中元素5为第"< "< L1.Insert(4, 17); cout<<"插入元素后链表为:"; L1.PrintList( ); L1.Delete(8); cout<<"删除第8个元素后链表变为:"; L1.PrintList( ); return 0; } 实验结果: 3.设计一个不带头结点的单链表类,要求: (1)不带头结点单链表类的成员函数包括取数据元素个 数、插入元素、删除所有值为k的元素、取数据元素。 (提示:要考虑在第一个数据元素结点前插入和删除第 一个数据元素结点时与在其他位置插入和删除其他 位置结点时的不同情况。) (2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。 实验代码: #include using namespace std; template struct Node { T data; Node }; template class LinkList { public: LinkList( ){first=new Node LinkList(T a[],int n); ~LinkList( ); int Length( ); //求单链表的长度 T Get(int i); //取单链表中第i个结点的元素值 void Insert(int i, T x); //在单链表中第i个位置插入元素值为x的结点 T Delete(int i); //在单链表中删除第i个结点 void PrintList( ); //遍历单链表,按序号依次输出各元素 private: Node }; template LinkList { int i=1; Node first=new Node first->data=a[0]; first->next=NULL; p=first; for(i=1;i { q=new Node q->data=a[i]; q->next=NULL; p->next=q; p=q; } } template LinkList { Node p=first; while(p) { p=p->next; delete first; first=p; } } template int LinkList { int i=0; Node p=first; while(p) { p=p->next; i++; } return i; } template T LinkList { int j=1; Node p=first; while(p&&j { p=p->next; j++; } return p->data; } template void LinkList int j=1; Node p=first; while(p&&j { p=p->next; j++; } q=new Node q->data=x; q->next=p->next; p->next=q; } template T LinkList { int j=1; Node p=first; while(p&&j { p=p->next; j++; } q=p->next; p->next=q->next; return q->data; delete q; } template void LinkList { Node p=first; while(p) { cout< p=p->next; } cout< } int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; LinkList cout<<"链表长为:"< cout<<"链表的第6个元素为:"< L.Insert(5,17); cout<<"在链表第5个位置插入元素17后链表变为:"; L.PrintList(); L.Delete(8); cout<<"删除第8个元素后链表变为:"; L.PrintList(); return 0; } 实验结果为: 4.设计一个带头结点的循环单链表类,实现约瑟夫环问题; 问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m从第一个人开始顺时针方向自1起顺序报数。报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数.如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,并给出出列人的编号序列。 测试数据: n=7,7个人的密码依次为3,1,7,2,4,8,4 初始报数上限值m=20 实验代码: #include using namespace std; struct Node//定义一个接点包含编号,密码,指针变量{ int num; int code; C++实验报告 实验4 类与对象 一、实验目的 1、掌握类的声明和使用 2、掌握类的声明和对象的声明 3、复习具有不同访问属性的成员的访问方式 4、观察构造函数和析构函数的执行过程 5、学习类的组合使用方法 6、使用DEBUG调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序 二、实验任务 1、声明一个CPU类,包含等级rank、频率frequency、电压voltage等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU-Rank,声明为enum CPU-Rank{P1=1,P2,P3,P4,P5,P6,P7}, frequency为MHz的整数型,voltage为浮点型的电压值。观察构造函数好析构函数的调用顺序。 2、声明一个简单的Computer类,有数据成员芯片cpu、内存ram、光驱cdrom 等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM 类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 3、设计一个用于人事管理的People类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number编号、sex性别、birthday出生日期、id身份证号等。其中出生日期声明为一个日期类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内嵌成员函数、组合。 三、实验内容 任务1:首先声明枚举类型,在这里出现了知识性错误,不清楚具体应如何声明,经查询相关书籍,知道应在类外进行声明。初次用类来进行编程,在概念上是有一些混乱的,例如构造函数和析构函数的调用顺序等。在用debug单步调试后,明白其中道理。 源程序: //Lab4_1.cpp #include 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 综合实验报告 面向对象程序设计 专业名称: 物联网工程 ___班级: _____ 级2班__ ___________姓名: 你哥哥 学号: 02051928 信息科学与工程学院 二零一三年七月 第一题: (1) 1.1题目概述 (1) 1.2设计思路 (2) 1.3设计说明与调试分析 (2) 1.4编码实现 (2) 1.5程序运行结果 (5) 1.6设计心得 (5) 第二题: (6) 2.1题目概述 (6) 2.2设计思路 (7) 2.3设计说明与调试分析 (7) 2.4编码实现 (7) 2.5程序运行结果 (11) 2.6设计心得 (11) 第一题: 1.1题目概述 用抽象类设计计算二维平面图形图形面积的程序, 在基类TDshape中设计纯虚函数area()和printName(), area()用于计算几何图形的面积, printName()用于打印输出几何图形的类名, 如Triangle类的对象就打印输出”Triangle”。每个具体形状的类则从抽象类TDshape派生, 各自需要定义其它独有的数据成员和成员函数, 而且定义area()和printName()的具体实现代码, 如图所示。 要求编写以TDshape为接口的函数, 借以访问具体类如 Triangle和Rectangle类的成员函数area(), printName ()。1.2设计思路 由简到繁, 逐步实现。 1.3设计说明与调试分析 编写基类TDshape->编写虚函数->编写继承类Triangle ->实例化TDshape和Triangle ->调用基类虚函数实现调用继承类相应函数->同样的方式处理继承类Rectangle. 1.4编码实现 #include 实验九类和对象的使用实验报告 一实验目的 1、学会用构造函数对类对象进行初始化 2、掌握析构函数,并了解构造函数和析构函数的调用顺序 3、了解对象数组和对象指针的用法 4、学会共用数据的保护,了解常对象、常成员函数等的使用限制 二实验内容和要求 1.回顾课本知识,掌握重点和难点,认真分析例题熟悉本章内容。 2.完成本章课后习题2、6、7题,认真分析每一题的代码。 三实验环境 Visual C++6.0开发环境 四源程序 2、 #include Date::Date() { month=1; day=1; year=2005; } void Date::display() { cout< 面向对象分析与设计实验报告 题目:宿舍管理系统 学号:200*********** 姓名:****** 班级:09软件*****04 完成时间:2011.11.09 目录 1 系统功能需求 (3) 1.1管理系统模块 (3) 1.2查询学生模块 (3) 1.3学生管理模块 (4) 1.4资料修改模块 (5) 1.5楼栋管理模块 (6) 1.6出入登陆模块 (6) 2 建立需求模型 (7) 2.1 划分子系统 (7) 2.2 识别参与者 (8) 2.3 识别用况 (8) 2.4 对需求进行捕获与描述 (9) 3 系统分析 (11) 3.1 寻找类 (11) 3.2 建立状态机图 (12) 3.3 建立类图 (12) 3.4 建立顺序图 (13) 4 系统设计........................................................................... 1错误!未定义书签。 4.1 问题域部分设计 (14) 4.2 人机界面部分设计 (14) 5 总结 (16) 参考文献 (17) 1.系统的功能需求 我校学生公寓现为手工管理,效率低、易出错、手续繁琐,而且耗费大量的人力,物力,财力。故设计一个学生公寓管理系统,管理学生住宿情况,员工情况,处理学生离校,管理人员来访情况等功能。通过此系统,后勤人员可以对学生公寓的各项情况实行电脑化管理,以提高工作效率,也使得公寓管理所需的各项信息能方便快速进行录入,查询,删除和更新。 面对学生公寓管理工作的特点以及该管理工作的具体问题, 本系统可以解决以下问题: (1)录入公寓各学生的基本情况。 (2)全面查询学生的基本情况。 (3)对学生离校进行处理。 (4)每学期对学生住宿进行注册。 (5)对来访人员进行出入管理。 (6)对学生的财务进行登记管理。 (7)对楼栋物资和楼栋的管理。 (8)对各项情况进行修改,删除,更新。 (9)友好的操作界面, 以及简单快速的操作. (10)多种查询方式。 本系统针对学生公寓管理日常的工作程式, 对学生公寓的各项情况例如:学生信息,学生个人财产信息,来访人员信息等进行有效管理,并能通过各方法进行快速方便的查询。使学生公寓管理工作运作简明、清晰,各状况一目了然,使学生公寓管理工作更加科学化、规范化。 1.1管理系统模块:实现用户退出功能。 1.2查询学生模块:该模块包括五个子模块 1.按学号查询——实现按学号查询学生信息 2.按姓名查询——实现按姓名查询学生信息 3.按学生班级查询——实现按学生班级查询学生信息 4.按家庭住址查询——实现按家庭住址查询学生信息 5.混合查询——实现按混合查询学生信息 实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样? 答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示 实验报告 课程名称Java程序设计 实验项目实验一类、对象与构造函数 实验二派生类与继承 系别___________理学院_____________ 专业/班级_________电技1302____________姓名______蔡超月____________ 实验日期_______________________ 成绩_______________________ 指导教师夏红科 一、实验题目:实验一类、对象与构造函数 实验二派生类与继承 二、实验内容: (1)创建一个雇员类,该类中有数据成员有姓名、家庭住址和邮政编码等,其功能有修改姓名、显示数据信息。 要求:雇员类的定义作为.h保存 雇员类功能函数的实现放在.cpp中。 雇员类的使用放在单独的.cpp文件中,该文件使用#include编译预处理命令包含类定义的头文件,在main()函数中使用雇员类创建几个对象并显示信息。 (2)定义一个哺乳动物类,再由此派生出人类、狗类和猫类,这些类中均有speak()函数,请设计相应的类层次结构并加以实现,观察在调用过程中,到底使用了哪个类的speak()函数。 (3)设计一个能细分为矩形、三角形、圆形和椭圆形的图形类,使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽,高,中心点等)和方法(如初始化、求面积等),并设计多种继承模式来测试继承的属性。 三、程序清单及结果:(需要标明实现程序对应的实验内容,并给出合理的程序注释及运行结果) 1)程序清单及注释 内容1: #includeC++实验报告 第四章 类与对象
面向对象程序设计实验报告完整版
C++实验九类和对象的使用实验报告
面向对象分析与设计实验报告
实验报告_实验3 类与对象
C上机实验报告实验四
面向对象技术-实验报告
C++实验二类与对象(附答案)