《面向对象程序设计》C++实验报告.doc

上传人:laozhun 文档编号:2385134 上传时间:2023-02-17 格式:DOC 页数:55 大小:476KB
返回 下载 相关 举报
《面向对象程序设计》C++实验报告.doc_第1页
第1页 / 共55页
《面向对象程序设计》C++实验报告.doc_第2页
第2页 / 共55页
《面向对象程序设计》C++实验报告.doc_第3页
第3页 / 共55页
《面向对象程序设计》C++实验报告.doc_第4页
第4页 / 共55页
《面向对象程序设计》C++实验报告.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《《面向对象程序设计》C++实验报告.doc》由会员分享,可在线阅读,更多相关《《面向对象程序设计》C++实验报告.doc(55页珍藏版)》请在三一办公上搜索。

1、面向对象程序设计实验报告学 院: 专 业: 班级学号: 姓 名: 学 期: 教 师: 实验一 C+基础练习院(系): 课程名称:面向对象程序设计教师签名:班级 学号 实验室姓名 实验成绩所用软件Word文档、VC+软件实验目的和要求1.掌握C+程序的基本格式与规范,学会编写简单的C+程序。2.理解C+程序结构的特点。3.熟悉C+程序基本的输入和输出操作。4.掌握C+数据类型常量和变量以及修饰符的使用方法。5.掌握函数定义、函数调用和函数说明的方法。6.熟悉作用域运算符的功能和基本使用方法。7.掌握C+内存的动态分配与释放方法。8.理解引用的概念,掌握引用的使用方法。实验内容和步骤1. 调试如下

2、的代码并回答问题。#include void main()/First c+ programchar name10;coutname;coutwelcome nameendl; (1)C+的注释和C有何不同? 答:C语言的注释有一种,用/*.*/作为注释分界符号 C+除保留了这种注释方式之外,还提供了一种更有效的注释方式,该注释以“/”开始,到行尾结束。(2)C+的输入和输出所使用的函数及其相应头文件与C有何不同?答:在C中进行输入输出操作时,常使用函数scanf和printf。C+除了可以照常使用这两个函数进行输入输出外,还增加了标准输入流对象cin和标准输出流对象cout来进行输入和输出。

3、Iostream是C+系统定义的一个头文件,在这个文件中声明了程序所需要的输入和输出操作的有关信息。在C语言中头文件中用“.h”作为后缀,如stdio.h、math.h等。2. 单步调试如下的代码并回答问题。#include inline int f(int x) return 2*x*x+4*x+5; inline double f(double x) return 2*x*x+4*x+5; void main() int x=5; double y=5.2; coutf(x)endl; coutf(y)endl;(1)inline的含义和作用是什么?答:含义:在函数说明前冠以关键字“inl

4、ine”,该函数就被声明为内联函数,每当程序中出现对该函数的调用时C+编译器使用函数体中的代码插入到调用该函数的语句处,同时用实参取代形参。作用:主要是为了消除函数调用时的系统开销,以提高运行速度。(2)C允许两个函数同名(函数重载)么,函数重载的作用是什么?答:不允许,作用:方便使用函数,只要函数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或者两个以上的函数可以使用相同的函数名。实现函数编译的多态性。(3)单步调试(F10、F11),记录f(x)和f(y)会分别调用哪段代码,为什么?答:f(x)会调用int f(int 5) f(y)会调用double f(double 5.2

5、)因为虽然两个函数名是一样的,形参类型和返回值类型不同,根据所给的实参类型如int型就调用int f(int 5)。3. 单步调试如下程序并回答问题。#include int a=1,2,3,4,5,6,7,8,9,10;int sum;void main() int i; int sum=0;for(i=0;i10;i+) if(ai%2!=0) sum=sum+ai; :sum=:sum+ai; cout sum of all is : :sum; cout sum of odd is: sum;(1)什么是局部变量和全局变量,其作用域如何界定?答:全局变量:在函数外定义的变量,可以为本源

6、文件的其他函数所公用,有效范围为从定义变量的位置开始到本源文件结束。局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效。(2)在局部变量和全局变量作用域重叠区域,默认哪个变量起作用;如果一定要访问全局变量,怎么实现。答:默认局部变量起作用。如果一定要访问全局变量,可以用:对所屏蔽的同名全局变量进行访问。(3)单步调试,查看并记录程序中循环体的两条语句的sum的变化情况,并说明它们是局部变量和全局变量。答:第一个sum为全局变量,第二个:sum为局部变量。4.调试如下程序并回答问题。#include void main() double *r; r = new double;

7、cin*r; coutArea is:3.14*(*r)*(*r); delete r;(1)C语言的内存申请和释放使用哪个函数答:内存申请:malloc释放:free(2)C+的内存申请和释放使用哪个函数?简单比较。答:内存申请:new 释放:delete 使用malloc函数时必须使用sizeof函数来计算所需要的字节数,而new可以根据数据类型自动计算所要分配内存的大小,这就减小了发生错误的可能性。new能够自动返回正确的指针类型,而不必像malloc函数那样,必须在程序中进行强制类型转换,才能使其返回正确的指针类型。实验二 C+简单程序设计练习院(系): 课程名称:面向对象程序设计教师

8、签名:班级 学号 实验室姓名 实验成绩所用软件Word文档、VC+软件实验目的和要求1.掌握if语句的用法。2.掌握switch语句的用法。3.掌握循环和多重循环的用法。4.掌握函数的定义和调用。5.掌握数组的定义和基本操作。实验内容和步骤1. 根据输入的百分制按五分制的成绩输出,记录和分析实验结果(后续每个实验都有此要求,不再一一注明)。百分制与五分制之间的关系见下表。分别使用if分支结构和switch结构编写程序。百分制五分制9010058089470793606920591#include int main () int a;cout从键盘输入百分制:a;if(a0&a60) cout五

9、分制为:1endl; /如果0a60,输出是五分制为:1elseif(a70) cout五分制为:2endl; /同上以此类推2elseif(a80) cout五分制为:3endl; /3elseif(a90) cout五分制为:4endl; /4elseif(a=100) cout五分制为:5endl; /5使用if嵌套语句实现某一范围内的输出具体看注释#include void main() int a,b;cout从键盘输入百分制:a;b=a/10; /对a求商并赋值给bswitch(b) /确定b的值为什么值 case 10 : case 9: cout五分制为:5endl;break

10、; /为10或9执行此语句输出是五分制为:5 case 8: cout五分制为:4endl;break; /同上 case 7: cout五分制为:3endl;break; case 6: cout五分制为:2endl;break; default : cout五分制为:1endl;break; /不为以上的值就执行此语句用switch语句实现分析如上的注释2. 编程求3100之间的所有素数,要求编写一个素数判断的函数,然后在主程序中调用。#include#includeint main() int i; /定义变量i int fun(int); /函数的声明 for(i=3;i=100;i+

11、) if(fun(i) coutiendl; /根据fun(i)的真值,为1时表示为素数则输出int fun(int n) /函数的定义int i,t; /定义两个整型变量t=sqrt(n);for(i=2;i=t;i+) /当有能被整除的数则返回0,后则返回1if(n%i=0)return 0; return 1;3. 编写程序列出斐波那契(Fibonacci)数列的前20项。(Fibonacci数列是指前两项为1,后面的每一项都为前两项之和。要求用数组存储数列)。#include void main()int a20=1,1; /初始化数组a,a0=a1=1int i; for(i=2;i

12、20;i+) ai=ai-1+ai-2; /后面每一项都为前两项之和 for(i=0;i20;i+) /输出前20个斐波那契数列 coutaiendl; 4. 编程实现输入10个整数,从小到大排列输出。#include int main()int a10; /定义一个整型数组int i,j,t; /定义三个整型变量i,j,tcout从键盘输入十个整数:endl; /提示性语句从键盘输入十个整数for(i=0;iai; /输入数据 for(i=0;i10;i+) /采用冒泡排序法 外部循环 for(j=0;jaj+1) /如果不是从小到大排列则交换位置关系 t=aj; aj=aj+1; aj+1

13、=t; for(i=0;i10;i+) /输出整理好后的数组 coutaiendl; 实验三 类与对象(一)院(系): 课程名称:面向对象程序设计教师签名:班级 学号 实验室姓名 实验成绩所用软件Word文档、VC+软件实验目的和要求1.掌握类、类的数据成员、类的成员函数的定义方式。2.理解类成员的访问控制方式。3.掌握对象的定义和操作对象的方法。4.理解构造函数和析构函数的定义与执行过程。5.掌握重载构造函数的方式。6.了解拷贝构造函数的方法。实验内容1.声明一个时间类,时间类中有3个私有数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和PrintTime)

14、。SetTime根据传递的3个参数为对象设置时间;PrintTime负责将对象表示的时间显示输出。在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示时间。#include class time /声明的一个时间类timepublic: /公共函数成员void SetTime(int i,int j,int k)Hour=i;Minute=j;Second=k;void PrintTime()coutHour点;coutMinute分;coutSecond秒endl;private: /三个私有成员int Hour;int Minute;int Second;int main()

15、time s; /定义一个对象ss.SetTime(9,20,30); /调用对象s的成员函数SetTime,给s的数据成员赋值s.PrintTime(); /输出显示出来 2.使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时间为10点40分50秒,并显示该时间。说明构造函数和SetTime成员函数在使用时的区别。#include class timepublic:time(int i,int j,int k) /定义构造函数,其名与类名相同Hour=i; /在构造函数中,对私有数据赋值Minute=j;Second=k;void PrintTime()coutHo

16、ur点;coutMinute分;coutSecond秒endl;private:int Hour;int Minute;int Second;int main()time s(10,40,50); /定义类的对象时调用构造函数time /分别给数据成员Hour、Minute和Second赋初值10、40和50s.PrintTime(); 说明:构造函数的作用主要是用来对对象进行初始化,定义对象时被系统自动调用。而SetTime成员函数赋初值既不方便也容易忘记,甚至可能出错。3.重载时间类的构造函数(不带参数)使小时、分、秒均为0。#include class timepublic:time()

17、;void PrintTime();private:int Hour;int Minute;int Second;time:time()Hour=0;Minute=0;Second=0;inline void time:PrintTime()coutHour点;coutMinute分;coutSecond秒endl;int main()time s1;couts1 output:endl;s1.PrintTime();4.在时间类的析构函数中输出“Good bye!”。说明析构函数的特点和调用时机。#include class timepublic:time(int i,int j,int k

18、); /构造函数的声明time(); /析构函数的声明void PrintTime();private:int Hour;int Minute;int Second;time:time(int i,int j,int k) /构造函数的定义Hour=i;Minute=j;Second=k;cout构造函数被调用endl; /显示构造函数被调用的信息time:time() /定义析构函数 coutgoodbyeendl;void time:PrintTime()coutHour点;coutMinute分;coutSecond秒endl;int main()time s(10,40,50);s.P

19、rintTime();析构函数的特点:析构函数名与类名相同,但它前面必须加一个波浪号(),不返回任何值是不能说明它的类型的,析构函数没有参数,撤销对象时,编译系统会自动地调用析构函数。主函数中的语句执行完后,对象的生命周期结束,在撤销时就要调用析构函数,释放分配给对象的存储空间对显示信息goodbye5.定义拷贝构造函数并调用。说明拷贝构造函数的作用特点。#include class timepublic:time(int i,int j,int k)Hour=i;Minute=j;Second=k;time(const time &p) /拷贝构造函数 Hour=p.Hour+1;Minut

20、e=p.Minute-20;Second=p.Second-40;void PrintTime()coutHour点;coutMinute分;coutSecond秒endl;private:int Hour;int Minute;int Second;int main()time s1(10,40,50); /定义对象s1,调用了普通的构造函数time s2(s1); /调用拷贝构造函数,用对象s1初始化对象s2s1.PrintTime();s2.PrintTime();拷贝构造函数的作用特点:用于按照需要初始化新对象。在建立一个新对象时,使用一个已经存在的对象去初始化这个新对象。实验四 类与

21、对象(二)院(系): 课程名称:面向对象程序设计教师签名:班级 学号 实验室姓名 实验成绩所用软件Word文档、VC+软件实验目的和要求1.掌握对象数组的定义与使用方法。2.理解对象指针的概念,学会用指针引用对象。3.了解this指针的工作方式。4.掌握静态数据成员和静态成员函数的基本使用方法。5.理解友元与友元函数的作用,掌握其使用方法。实验内容1定义一个学生(student)类,包含数据成员:学号(sno)、姓名(name)、年龄(age)、分数(score),以及成员函数:输入(input)和显示(print)。然后定义一个具有10个学生的数组,实现对这些学生信息的输入和显示。#incl

22、udeusing namespace std;class MyArraypublic: MyArray(int leng) length=leng; alist=new intlength; MyArray() delete alist; void input() int i; for(i=0;ialisti; void display()int j;for(j=0;jlength;j+)coutalistjleng;MyArray A(leng);A.input();A.display();return(0);2.修改上一个程序中的main函数:定义一个student类的指针p,使其指向上述

23、数组的第0个元素,并通过该指针实现对10个学生信息的输入和显示。最后简要说明对象数组、对象指针和普通数组和指针有何区别和联系。#include #include using namespace std;class studentprivate:int sno;string name;int age;int score;public:void input()cinsnonameagescore;void print()cout学号snoendl;cout姓名nameendl;cout年龄ageendl;cout分数scoreendl;int main()student k10;student *

24、p;int i;for(i=0;iinput();p-print(); 对象数组的元素是对象,不仅具有数据成员,而且还有函数成员,对象指针就是用于存放对象地址的变量,对象指针不仅能引用单个对象,也能访问对象数组。普通数组是存放类型一样的数据,指针可以通过访问首地址一一访问存放的数值。3.通过单步调试第一个程序,查看并记录每个元素的地址及其this指针的值,通过对比说明this指针的作用。#include #include using namespace std;class studentprivate:int sno;string name;int age;int score;public:v

25、oid input()cinsnonameagescore;void print()coutthis=this学号snoendl;cout姓名nameendl;cout年龄ageendl;cout分数scoreendl;int main()student k10;int i;for(i=0;i=9;i+)ki.input();ki.print(); sno -858993460 age -858993460 name ox00000000score -858993460this指针指向的是对象的初始地址4.将student类增加两个静态成员,人数(count)和平均分(average)。注意构

26、造函数、析构函数的编写以及静态成员的初始化,并说明这两个成员设置为静态成员的原因。#include #include using namespace std;class studentprivate:int sno;char *name;int age;int score;static int count;static float average;static float sum;public:void input()cinsnonameagescore;void print()cout学号snoendl;cout姓名nameendl;cout年龄ageendl;cout分数scoreendl

27、;void show()cout学生人数:count;cout平均成绩:averageendl;student(int snol,char *namel,int agel,int scorel)sno=snol;name=new charstrlen(namel)+1;strcpy(name,namel);age=agel;score=scorel;+count;sum=sum+score;average=sum/count;student()delete name;-count;sum=sum-score;int student:count=0;float student:sum=0.0;f

28、loat student:average=0.0;int main()student a1(1,小小,20,99);a1.print();a1.show();student a2(2,小江,12,100);a2.print();a2.show();student a3(3,肖肖,21,89);a2.print();a2.show();return 0;count随着定义对象的增加而增加。每定义一个对象,count加1,累计学生人数,average也应该随着定义对象的增加而改变着。因此它们被声明为静态数据成员,被studengt类的对象所共享。5.定义一个友元函数output,实现和成员函数pr

29、int相同的功能。说明友元函数作用以及和成员函数的区别。#include #include using namespace std;class studentprivate:int sno;string name;int age;int score;public:void input()cinsnonameagescore;friend void output(student &);void print()cout学号snoendl;cout姓名nameendl;cout年龄ageendl;cout分数scoreendl;void output(student &p)cout学号p.sno姓名

30、p.nameendl;cout年龄p.age分数p.scoreendl;int main()student k10;int i;for(i=0;i=9;i+)ki.input();output(ki); 友员函数可以通过入口参数传递进来的对象名(或对象指针、对象引用)来访问该对象所有的的数据成员,提高了程序运行效率。没有友员机制,外部函数访问类的私有数据,必须调用公有成员函数,在需要频繁调用私有数据时,会带来很大的开销,降低程序运行效率。实验五 派生类与继承院(系): 课程名称:面向对象程序设计教师签名:班级 学号 实验室 姓名 实验成绩所用软件Word文档、VC+软件实验目的和要求1理解类的

31、继承的概念,能够定义和使用类的继承关系。2.掌握派生类的声明和定义方法。3.熟悉公有派生和私有派生的访问特性。4.学习虚基类中解决二义性问题中的作用。实验内容1 定义一个基类MyArray,基类中可以存放一组整数。class MyArraypublic: MyArray(int leng); MyArray(); void Input(); void Display();protected: int *alist; /指向动态申请的一组空间 int length; /整数的个数;基类中有构造函数、析构函数、输入数据和输出数据的函数。#include class MyArraypublic: M

32、yArray(int leng); MyArray(); void Input(); void Display();protected: int *alist; /指向动态申请的一组空间 int length; /整数的个数;MyArray:MyArray(int leng)alist=new intleng;length=leng;MyArray:MyArray()delete alist;cout显示调用了析构函数endl;void MyArray:Input()int i;cout请输入数组元素:endl;for(i=0;ialisti;void MyArray:Display()int

33、 j;cout输出的数组元素为:endl;for(j=0;jlength;j+)coutalistjendl;int main() MyArray s(4); s.Input(); s.Display();2 定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。#includeusing namespace std;class MyArraypublic: MyArray(int leng) length=leng; alist=new intlength; MyArray() delete alist; void input() int i; for(i=0;ialisti;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号