




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.重 庆 交 通 大 学学 生 实 验 报 告实验课程名称 C+程序设计 开课实验室 数学实验室 学 院 理学院 年级 09级信息 专业班 2班 学 生 姓 名 学号 09180223 开 课 时 间 2009 至 2010 学年 第 2 学期评分细则内容分数实验过程设计 (40%)实验结果分析(30%)实验体会(20%)排版格式(10%)总 成 绩教师签名:韩逢庆实验2 类和对象2.1 实验目的 1 类的定义; 2 类对象的使用; 3 类成员变量、成员函数的定义和使用; 4 观察类的组合使用; 5 理解类的作用域; 6 理解类的声明; 7 理解类中 private 和 public 权限;8 掌握拷贝构造函数的定义和使用; 9 掌握构造函数的重载; 10 掌握析构函数的定义和使用11 理解构造函数和析构函数的执行过程2.2 实验内容 2.2.1 理解部分 1 理解下面的程序,回答后面的问题,并在 vc6.0 下运行查看结果。 #include class CDate void Set( int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return (year%4 = 0 & year%100 != 0)|(year%400 = 0); public : void Print() coutmonth / day / yearendl; private : int month; int day; int year; ; void main() CDate a; - a.Set(10,15,2007) ; a.Print(); 问题一:以上程序编译能通过吗,为什么,应该如何改正? 答:不能。因为没有定义构造函数,并且没有声明私有成员。修改后的程序代码为:#include class CDate private:int month,day,year;public :void Set( int m, int d, int y ) month = m ; day = d ; year = y ; int IsLeapYear() return (year%4 = 0 & year%100 != 0)|(year%400 = 0); void Print() coutmonth / day / yearendl; private : int month; int day; int year; ; void main() CDate a; a.Set(10,15,2007) ; a.Print(); 问题二:类 CDate 中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限? 答:成员变量为:month、day、year. 成员函数有:void Set( int m, int d, int y ) 、int IsLeapYear()、void Print() 问题三:处语句的意思是什么? 答: 定义一个省略参数的类。2 理解下面的程序,回答后面的问题,并在 vc6.0 下运行查看结果。 #include int month; / 全局变量 int day; int year; void Set( int m, int d, int y) - a :month=m; - :day=d; :year=y; class CDate public : void Set( int m, int d, int y) - b :Set(m,d,y); - void Print() coutmonth / day / yearendl; private : int month; / 成员变量 int day; int year; ; void main() CDate a; a.Set(10,15,2007) ; a.Print(); 问题一:处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符 : ,程序是否还能正确运行? 答:处是在给局部变量赋值。去掉:后不能正确运行。问题二:处调用的哪个函数,如果去掉域作用符 : ,程序是否还能正确运行? 答:处调用的是a处的函数。去掉:仍然不能正确运行。问题三:该程序的输出结果是什么,试解释该输出结果。 答:原因在于该类没有定义私有成员变量。3试指出以下程序的错误,并改正之。 #include class CPoint public : unsigned x, unsigned y; bool IsInCircle(CCircle *Circle) return (x-Circle-Center.x)*(x-Circle-Center.x) +(y-Circle-Center.y)*(y-Circle-Center.y)Radius*Circle-Radius); ; class CCircle public : unsigned Radius; CPoint Center ; ; void main() 答:错误在于bool IsInCircle(CCircle *Circle) ;修改后的程序为:#include class CCircle; class CPoint friend class CCircle();public : unsigned x;unsigned y; bool IsInCircle(CCircle *Circle) return (x-Circle-Center.x)*(x-Circle-Center.x) +(y-Circle-Center.y)*(y-Circle-Center.y)Radius*Circle-Radius); ; class CCircle public : unsigned Radius; CPoint Center ; ; void main() 4 理解下面的程序,回答后面的问题,并在 vc6.0 下运行查看结果。 #include class CPoint public : void Set( int x, int y); void Print(); private : int x; int y; ; void CPoint:Set( int x, int y) x = x; y = y; void CPoint:Print() cout x= x ,y= yendl; void main() CPoint pt; pt.Set(10,20); pt.Print(); 问题一:以上程序编译能通过吗,试解释该程序? 答:能够通过。问题二:以上程序的运行结构是否正确,如果不正确,试分析为什么,应该如何改正? 答:不正确。原因在于改程序中void Set( int x, int y)的形参与函数变量重名,产生二义性。void Set( int x, int y)应改为void Set( int x1, int y1);5 理解下面的程序,回答后面的问题,并在 vc6.0 下运行查看结果。 #include class CPerson public : void Print(); private : CPerson(); private : int age; char *name; ; CPerson:CPerson() void CPerson:Print() cout name= name ,age= ageendl; void main() CPerson ps(23, 张三 ); ps.Print(); 问题:以上程序存在若干错误,在不改变主函数内容的前提下,试改正该程序。答:修改后的程序为: #include class CPerson public : void Print(); CPerson(int a,char *b); private : int age; char *name; ; CPerson:CPerson(int a,char *b) age=a; name=b; void CPerson:Print() cout name= name ,age= ageendl; void main() CPerson ps(23, 张三 ); ps.Print(); 2.2.2 程序设计部分 1 试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,分别用来设置成员数据和输出成员数据,在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。2 设计实现一个 CPoint 类,满足以下要求: a 该类包含两个整型成员变量 x (横坐标)和 y (纵坐标),以及一个输出函数 Print() 用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量; b 可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值 0 ; c 可以采用直接输入参数的方式来初始化该类的成员变量; d 可以采用其它的 CPoint 对象来初始化该类的成员变量; e 设计一个主函数来测试以上功能。3 设计一个 CStudent (学生)类,并使 CStudent 类具有以下特点: a 该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩; b 学生全部信息由键盘输入,以提高程序的适应性; c 通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可以求取平均成绩; d 输出学生的基本信息、各科成绩与平均成绩; e 学生对象的定义采用对象数组实现; f 统计不及格学生人数。4 设计一个用于人事管理的员工类(employee),包含的成员变量有:编号、性别、出生日期、身份证号码等,成员函数有:构造函数、析构函数、拷贝构造函数、员工基本信息输出函数等。其中,编号用字符数组,身份证号码用字符指针,出生日期为日期类的对象一、 实验结果分析1 试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,分别用来设置成员数据和输出成员数据,在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。(一)、程序理解该程序考察构造函数和利用成员函数对私有成员进行修改的问题,此外也考察了应用与指针在数据应用方面的广泛应用!(二)、程序设计见代码。二、 实验体会改程序让我了解熟悉了构造函数与成员函数对私用成员的重要性,以及指针域应用的区别。三、 附录:(源代码)#includeiostream.h#includemath.hclass fushuprivate:float shibu;float xubu;public:fushu(float a,float b); fushu(float *a,float *b);fushu(float &a,float &b);void show(void);fushu(void);fushu:fushu(float a,float b)/定义公共函数shibu=a;xubu=b;fushu:fushu(float *a,float *b)/定义参数为指针类型的函数shibu=*a;xubu=*b;fushu:fushu(float &a,float &b)/定义参数为引用类型的函数shibu=a;xubu=b;void fushu:show(void)/私用成员的输出cout实部为:endl;coutshibuendl; cout虚部为:endl;coutxubuendl; fushu:fushu()main()float k=1.2,n=2; float *r=&k,*i=&n;fushu a(2.5,3);cout采用对象方式输出结果为:endl;a.show(); fushu b(r,i);cout采用指针方式输出结果为:endl;b.show();fushu c(&k,&n);cout采用引用方式输出结果为:endl;c.show();2 设计实现一个 CPoint 类,满足以下要求: a 该类包含两个整型成员变量 x (横坐标)和 y (纵坐标),以及一个输出函数 Print() 用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量; b 可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值 0 ; c 可以采用直接输入参数的方式来初始化该类的成员变量; d 可以采用其它的 CPoint 对象来初始化该类的成员变量; e 设计一个主函数来测试以上功能。四、 实验结果分析(一)、程序理解 改程序主要考察了构造函数与一般成语函数的作用,以及在定义构造函数在参数个数与参数默认的情况下的构造情况!(二)、程序设计见源代码.五、 实验体会此实验让我对构造函数在参数默认以及参数个数缺省情况下的定义方法有了更深的掌握,以及对成员函数的作用有了更深刻的了解!六、 附录:(源代码)#include iostream.h#include stdio.hclass CPoint private:float x, y;public:CPoint(void);CPoint (float x1,float y1);modify(float x2,float y2);CPoint();void Print(void);CPoint:CPoint()x=0;y=0;CPoint:CPoint(float x1,float y1)/默认参数函数x=x1;y=y1;CPoint:modify(float x2,float y2)/对私有成员的修改x=x2;y=y2;CPoint:CPoint()void CPoint:Print(void)/输出坐标功能函数cout初始化后的坐标为:(x,y)endl;void main(void) CPoint a,b(8,9); a.Print(); b.Print();a.modify(9,8);a.Print();3 设计一个 CStudent (学生)类,并使 CStudent 类具有以下特点: a 该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩; b 学生全部信息由键盘输入,以提高程序的适应性; c 通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可以求取平均成绩; d 输出学生的基本信息、各科成绩与平均成绩; e 学生对象的定义采用对象数组实现; f 统计不及格学生人数。七、 实验结果分析(一)、程序理解该程序主要考察嵌套类定义,以及在定义相关成员函数是的定义方法。此外还考察了程序设计的灵活性!(二)、程序设计见源代码。八、 实验体会该实验让我对嵌套类的定义有了更深刻的了解,对嵌套类的使用有了进一步的掌握。最主要的是让我知道了程序设计的灵活性的重要性!九、 附录:(源代码)#include iostream.h#include string.h#include math.h#include stdio.hclass Cstudentclass gradeprivate:int sum;float process; float singal;float construct;float average;public:grade(float a,float b,float c)sum=0;process=a;singal=b;construct=c;average=(process+singal+construct)/3.0; void modify(float a,float b,float c)/子对象值的修改传值 process=a; singal=b; construct=c; void show()/子对象的显示 average=(process+singal+construct)/3.0; cout程序设计成绩为:processendl;cout信号处理成绩为:singalendl;cout数据结构成绩为:constructendl;cout学生平均成绩为:averageendl;if(process60)|(singal60)|(construct60)sum+;cout有不及格科目的学生数为:sumendl; ;private:char *name;char *number;grade all;public:Cstudent(char *name1,char *number1,float a1,float b1,float c1);Cstudent(void);void set(void);void display();Cstudent:Cstudent(char *name1,char *number1,float a1,float b1,float c1):/函数1(传入数据)all(a1,b1,c1) name=new charstrlen(name1)+1; strcpy(name,name1); number=new charstrlen(number1)+1; strcpy(number,number1);Cstudent:Cstudent(void)/函数2(释放空间)delete name;delete number;void Cstudent:set(void)/函数3(数据修改) float grade1,float grade2,float grade3;char name120,char number110; cout请输入学生的程序设计成绩:grade1; cout请输入学生的信号处理成绩:grade2; cout请输入数据结构成绩:grade3; delete name; cout请输入学生的姓名:name1; name=new charstrlen(name1)+1;strcpy(name,name1); delete number; cout请输入学生的学号:number1; number=new charstrlen(number1)+1;strcpy(number,number1);all.modify(grade1,grade2,grade3);void Cstudent:display()/函数4(数据输出)cout学生姓名为:nameendl;cout学生学号为:numberendl;all.show();void main() char a20,b10; float grade1,grade2,grade3; cout请输入学生的姓名:a; cout请输入学生的学号:b; cout请输入学生的程序设计成绩:grade1; cout请输入学生的信号处理成绩:grade2; cout请输入数据结构成绩:grade3; Cstudent number1(a,b,grade1,grade2,grade3); number1.display(); number1.set(); coutendl-重新修订后的信息为-endlendl; number1.display();4 设计一个用于人事管理的员工类(employee),包含的成员变量有:编号、性别、出生日期、身份证号码等,成员函数有:构造函数、析构函数、拷贝构造函数、员工基本信息输出函数等。其中,编号用字符数组,身份证号码用字符指针,出生日期为日期类的对象十、 实验结果分析(一)、程序理解同上一个程序一样,改程序主要考察队类以及嵌套类的理解与定义方法的掌握。另外还考察了析构函数、构造函数、拷贝构造函数、其他成员函数的配套应用。(二)、程序设计见源代码。十一、 实验体会该实验让我了解到了析构函数与构造函数配套的具体作用,同时也让我对拷贝构造函数有了更深刻的了解与掌握。十二、 附录:(源代码)#include iostream.h#include stdio.h#include string.hclass employeeclass birthdayprivate:char *month;char *day;char *year;public:birthday(char *mon,char*da,char*ye)/子对象传值month=mon;day=da;year=ye;birthday()month=0;day=0;year=0; void modify(char *a,char *b,char *c)/子对象值的修改传值 month=a; day=b; year=c; void show()/子对象的显示 cout人员出生月份为:monthendl;cout人员出生日为:dayendl;cout人员出生年为:yearendl; ;private:char *number;char *sex;char *array;birthday all;public:employee(char *number,char *sex,char *array,char *m,char *d,char *y);employee(void);void set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目出资合同协议书范本
- 物流公司的采购合同范本
- 门面房车位出租合同范本
- 消防施工协议合同书范本
- 汉中酒店承包联营协议书
- 电商app开发合同范本
- 申请延期的补充合同范本
- 派出所门面出租合同范本
- 父子结婚房子协议书范本
- 污泥处理外包合同协议书
- 四川绵阳公开招聘社区工作者考试高频题库带答案2025年
- 恋爱协议书范文模板
- 2025工程建设项目多测合一成果报告书范本
- 2025-2030年中国热力生产和供应行业竞争状况规划研究报告
- 2025年四川酒业茶业集团投资有限公司及下属子公司招聘笔试参考题库附带答案详解
- 珊瑚礁生态修复施工方案
- 四川省成都市2024-2025学年高一上学期期末考试历史试题(含答案)
- 我的家乡泉州
- 体外冲击波碎石
- AEO贸易安全培训
- 科研办公楼建筑设计与规划方案
评论
0/150
提交评论