




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计实验指导书适用专业:计算机科学与技术 软件工程 网络工程编写者:面向对象程序设计课程组2015年3月一、基本目的面向对象程序设计是计算机学科的核心课程之一,C+语言程序设计是当前自20世纪80年代以来迅速推广和广泛使用的一种程序设计语言。 通过本课程实验,使学生掌握基本的面向对象的程序设计方法,熟练类与对象、继承与派生、多态性、模板、异常处理机制以及I/O流等程序设计能力,并利用+语言进行实际问题的程序设计。二、实验环境 建议使用Microsoft Visual C+ 6.0集成开发环境。三、实验要求1. 每人独立完成实验和实验报告。2. 每个实验包括多个实验题目,要求每个实验在规定时间内设计、实现尽量多的题目。3. 程序书写符合程序书写规范。四、实验内容序号实 验 内 容参考实验课时数计划开设周次实验1C+程序设计基础练习23实验2类与对象65-7实验3派生类与继承48-9实验4多态性416实验5模板与异常处理217实验6C+的流类库与输入输出217合计20五、实验报告每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。实验报告主要包括四方面内容: 实验设计按照每个实验题目要求,设计相应的类以及函数的实现方法,并用适当的方式进行描述。 (2) 程序清单实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。(3)运行结果原始数据,程序运行结果截图及说明。 (4) 实验总结 调试过程及调试中遇到的问题及解决办法;调试程序的收获心得与体会,分析不足之处。实验一 C+程序设计基础练习一、实验目的1、学习编写简单的C+程序,并掌握C+程序的基本格式与规范。2、理解C+程序结构的特点。3、学习C+程序基本的输入输出操作。4、学习数据类型常量和变量以及修饰符的使用。5、学习基本的函数定义与调用方法。6、学习作用域运算符的功能与基本使用方法。7、学习内存的动态分配与释放方法。8、学习引用的概念,掌握引用的基本使用方法。二、试验内容(一)程序填空1、输入并运行所给的下述参考程序,并将程序中的注释部分也输入计算机,体会和理解程序的基本格式规范。参考程序1#include int add(int a,int b);int main()int x,y,sum;coutEnter two numbers:n;/在下画线处填上语句,完成用cin读入x和y_sum=add(x,y);coutThe sum is:sumn;return 0;int add(int a,int b)/在下画线处填上语句,完成计算a与b的和并返回之_2、调试和运行参考程序2和参考程序3,掌握输入输出及其格式控制的基本使用方法。参考程序2#include int main()char name20;cout”Hello,your name:”;/在下画线处填上语句,完成将字符串输入到数组name中_/在下画线处填上语句,完成将name数组用cout输出_return 0;参考程序3# include void main()int x=25;/在画线处填上语句,将变量x的值分别以十六进制、十进制、八进制输出_3、调试和运行参考程序4和参考程序5,理解内置函数与函数重载的概念与基本使用方法。参考程序4#include inline int doub(int x)/在下画线处填上语句,用于返回x的2倍_int main()for(int i=1; i3;i+)couti”doubled is”doub(i)endl;cout”i+2 doubled is”doub(i+2)endl;参考程序5#include int mul(int x,int y) /mul函数1 return x*y; int mul(int x,int y,int z) /mul函数2 return x*y*z; void main()int a=3,b=4,c=5;/在下画线处填上语句,用于调用mul函数1couta*b=_endl;/在下画线处填上语句,用于调用mul函数2couta*b*c=_endl; 4、调试和运行参考程序6和参考程序7,并观察输出结果,体会和理解作用域运算符的概念与基本使用方法。参考程序6#include int avar=10;main()/在下画线处填上语句,定义局部变量avar并赋予初始值25_ _coutavar isavarendl;return 0;参考程序7#include int avar;main()int avar;/在下画线处填上语句,将局部变量avar赋值25_/在下画线处填上语句,将全局变量avar赋值10_/在下画线处填上语句,输出局部变量avar的值coutlocal avar is:_endl;/在下画线处填上语句,输出全局变量avar的值coutg1obal avar is:_endl;return 0; 5、调试和运行参考程序8和参考程序9,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。参考程序8#include main()int *p; /声明一个整型指针变量p/在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给p_*p = 10;cout*p; /在下画线处填上语句,用于撤销指针p,释放p指向的存储空间_return 0;参考程序9#include main()int *p;/在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p_if (!p)coutallocation failuren;return 1;/在下画线处填上语句,将p所指向的存储区赋值20_cout*p;/在下画线处填上语句,用于撤销指针p,释放p指向的存储空间_return 0;(二)程序设计题1、从键盘上读入两数,比较两个数的大小,并按从小到大的次序输出。(要求使用变量引用) 2、 输出1到100的偶数,一行5个。 3、给出一个百分制的成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。4、一个10个整数的数组(34,91,83,56,29,93,56,12,88,72),找出最小数和其下标,并在主函数中打印最小数和下标。5、编写一个C+风格的程序,解决百元问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?6、编写一个程序,建立一个上sroot()的函数,返回其参数的二次方根。要求使用重载函数,重载3次,让其返回整数、长整数与双精度数的二次方根。7、写C+风格的程序,用二分法求解f(x)=0的根。8、编写一个程序,用动态分配空间的方法计算 Fibonacci数列的前20项并存储到动态分配的空间中。实验二 类与对象一、实验目的1、学习类与对象的定义,掌握类与对象的使用方法。2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。4、掌握用指针和引用向函数传递参数。5、掌握静态数据成员和静态成员函数的使用。6、理解友元与友元函数的作用与使用方法。二、实验内容1、下面是一个计算器类的定义,请完成该类成员函数的实现。class Counter public: Counter(int number); void increment(); /给原值加1 void decrement(); /给原值减1 int getValue(); /取得计数器值 int print(); /显示计数 private: int value;2、根据注释语句的提示,实现类Date的成员函数。class Date public: void printDate();/显示日期 void setDay(int d);/设置日的值 void setMonth(int m);/设置月的值 void setYear(int y);/设置年的值 private: int day,month,year;int main()Date testDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2014);testDay.printDate();return 0;3、建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。4、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为15,将price初始化为qu的10倍。显示每个对象的qu*price值。5、修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。6、构建一个类Stock,含字符数组stockcode及整型数据成员quan、双精度型数据成员price。构造函数含3个参数 :字符数组na及q、p。当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。成员函数print()使用this指针,显示对象内容。7、参考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为Rect。class Rectpublic: int Area_int(); double Area_double(); Rect(double length,double width); Rect(int length,int width); virtual Rect();private: int nLength; int nWidth; double dLength; double dWidth;;【要求】(1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。(2)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。(3)体现对象的构造和析构过程。例如,在构造函数中用cout”I am the constructor!”endl;在析构函数中输出cout”I am the destructor”endl。(4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。8、声明一个Student,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。实验三 派生类与继承一、实验目的1、学习类的继承,能够定义和使用类的继承关系。2、学习派生类的声明与定义方法。3、掌握类的定义和对象的声明。4、熟悉公有派生和私有派生的访问特性。5、掌握派生类构造函数和析构函数的执行顺序。6、掌握利用访问声明调整基类成员在派生类中的访问属性。二、试验内容1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。class table public: table(int p) i=p; void ascii(void); protected: int i;void table:ascii(void)int k=1;for (;i127;i+)coutsetw(4)i (char)i;if(k)%12=0)coutn;k+;coutn;class der_table:public tablepublic:der_table(int p,char *m):table(p)c=m;void print(void);protected:char *c;void der_table:print(void)coutcn;table:ascii();int main()der_table obl(32,ASCII value-char);obl.print();return 0;提示:修改后的主程序为:int main()der_table ob(a,z,ASCII value-char);ob.print();return 0;2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。class Time public:Time(int h,int m, int s)hours=h;minutes=m;seconds=s;void display()cout出生时间:hours时minutes分seconds秒endl;protected:int hours,minutes,seconds;class Date public: Date(int m,int d,int y) month=m; day=d; year=y; void display() cout出生年月:year年month月day日endl; protected: int month,day,year; ;3、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。4、给出下面的基类:class area protected: double height; double width; public: area(double h,double w) height=h; width=w; virtual double getarea()=0;【要求】(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。5、编写一个程序,递归调用被继承的基类成员函数,实现求素数的功能。实验四 多态性一、实验目的1、掌握运算符重载的基本方法。2、掌握友元运算符函数和成员运算符函数的使用方法及两者之间的不同。3、学习虚函数的定义与使用方法。4、了解静态多态性和动态多态性。5、学习使用虚函数和继承实现动态多态性。二、试验内容1、编写一个程序,要求:(1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;(3)定义成员函数print,调用该函数时,以格式“real+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i;(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在059分,秒钟范围限制在059秒。提示:时间类Time的参考框架如下:class Time public: Time(int h=0,int m=0,int s=0);/构造函数 Time operator+(Time &);/运算符重载函数,实现两个时间的相加 void disptime();/显示时间函数 private: int hours,minutes,seconds;3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。4、下面提供一个体会继承中的多态性和虚函数在多态性中的作用的题目。请根据提示进行实验。定义类BaseFly,其中Fly()函数输出特定内容。例如: class BaseFly public: void Fly()(coutn-CIass BaseFly:Fly()-n; ; (1)定义类BirdFly、DragonFly和PlaneFly,都继承自BaseFly,重载Fly()函数,使得各类中的Fly()函数分别输出不同的内容。 class BirdFly:public BaseFly public: void Fly() coutn-class BirdFly:Fly()-n; ; class DragonFly:public BaseFly public: vold Fly()coutn-Class DragonFly:Fly()-n;) ); class PlaneFly:public BaseFly public: void Fly()coutn-Class PlaneFly:Fly()-n; ; (2)在main()函数中,用“new”关键字分配出以上四个类的实例,调用各个实例的Fly()函数测试多态性。请参考以下代码: int main() coutn测试继承中的多态性(Virtual? Or not?):n; BaseFly *pBase; BirdFly *pBird=new BirdFly; pBascpBird; coutn; pBase-Fly(); DragonFly * pDragon=new DragonFly; pBase=pDragon; coutn; pBase-Fly(); PlaneFly * pPlane=new PlaneFly; pBasepPlane; coutn; pBase-Fly(); return 0, (3) 将BaseFly:Fly()声明为virtual,在main()中定义BaseFly的指针:*pBase,依次分别指向UirdFly、DragonFly和P1aneFly,并调用各类的Fly()函数,体会虚函数作用。 BaseFly * pBasenew BaseFly; BirdFly *pBird=new BirdFly; pBasepBird;5、写一个程序,定义抽象类Container:class Container protected: double radius; public: Container(double r);/抽象类Container的构造函数 virtual double surface_area()=0;/纯虚函数surface_area virtual double volume()=0;/纯虚函数volume ;【要求】建立3个继承Container的派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体),让每一个派生类都包含虚函数surface_a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手指谣小熊猫课件
- 红色旅游教育功能分析-洞察及研究
- 次卡协议书5篇
- 人教版四年级数学上学期第6单元除数是两位数的除法综合素养评价卷(含答案)
- 吉林省白城市通榆县育才学校2024-2025学年八年级下学期4月月考生物试题(含答案)
- 学生食品安全培训教育课件
- 手扶梯使用安全培训课件
- 2025-2026学年安徽省安庆市太湖县五校联考九年级(上)开学英语试卷(含答案)
- 工程咨询国际化竞争-洞察及研究
- 模块化设计质量策略-洞察及研究
- 学校反恐防恐工作领导小组及职责
- 骨科手术铺巾
- 新质生产力助推乡村振兴 (修正版)
- 碳普惠制的实践检视与立法完善
- LNG加气站安全规章制度
- 2024新人教版英语七年级上单词默写表(小学部分)
- 建设工程监理安全资料(完整版)
- 客服人员绩效考核方案
- 苹果电脑macOS效率手册
- 城区绿地养护服务费项目成本预算绩效分析报告
- 职称英语A级词汇大全
评论
0/150
提交评论