2017春16级面向对象程序设计实验指导书(20学时).doc_第1页
2017春16级面向对象程序设计实验指导书(20学时).doc_第2页
2017春16级面向对象程序设计实验指导书(20学时).doc_第3页
2017春16级面向对象程序设计实验指导书(20学时).doc_第4页
2017春16级面向对象程序设计实验指导书(20学时).doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计实验指导书适用专业:计算机科学与技术 信息与计算科学 编写者:面向对象程序设计课程组2016年3月一、基本目的面向对象程序设计是计算机学科的核心课程之一,C+语言程序设计是当前自20世纪80年代以来迅速推广和广泛使用的一种程序设计语言。 通过本课程实验,使学生掌握基本的面向对象的程序设计方法,熟练类与对象、继承与派生、多态性、模板、异常处理机制以及I/O流等程序设计能力,并利用+语言进行实际问题的程序设计。二、实验环境 建议使用Microsoft Visual C+ 6.0集成开发环境。三、实验要求1. 每人独立完成实验和实验报告。2. 每个实验包括多个实验题目,要求每个实验在规定时间内设计、实现尽量多的题目。3. 程序书写符合程序书写规范。四、实验内容序号实 验 内 容参考实验课时数计划开设周次实验1C+程序设计基础练习410-11实验2类与对象412-13实验3派生类与继承414、16实验4多态性417实验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、考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为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,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。4、声明一个Student类,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。5、依据下面的描述设计并实现一个时间类Time,并在main函数中定义所需要的对象验证所实现代码的正确性。(1) 私有数据成员包含小时(Hour)、分钟(Minute)和秒(Second);(2) 三个重载构造函数:a)一个是无参数的构造函数;b)一个是带参数的构造函数,实现对数据成员的初始化;c)一个是copy构造函数,实现用一个对象初始化本对象;(3) 成员函数实现时间对象相加、减运算:a) Time Add(Time&);b) Time Sub(Time&);(4) 友元函数实现时间对象相加、减的运算符重载:a) friend Time operator + (Time&, Time&);b) friend Time operator (Time&, Time&);(5) 公有成员函数void Display();输出对象的数据成员;6、依据下面的描述定义并实现一个向量类Vector,并在main函数中定义所需要的对象验证所实现代码的正确性1) 私有数据成员int dimension; double* data; 表示向量的维数与向量元素存储空间的首地址2) 无参构造函数,实现把向量所有元素初始化为0 3) 有参构造函数,实现用一个n维数组初始化n维向量4) 拷贝构造函数5) 析构函数6) 输出数据成员函数 void display( );7) 成员函数int GetDimension();获取向量对象的维数8) 成员函数 double SetAt(double newdata,int index);实现给向量的第index+1个元素赋值9) 成员函数 double GetAt(int index);实现读取向量的第index+1个元素的值10)实现向量加、减、乘运算的成员函数 Vector Add(const Vector &ob2 ); Vector Sub(const Vector &ob2 ); int Mult(const Vector &ob2 );实验三 派生类与继承一、实验目的1、学习类的继承,能够定义和使用类的继承关系。2、学习派生类的声明与定义方法。3、掌握类的定义和对象的声明。4、熟悉公有派生和私有派生的访问特性。5、掌握派生类构造函数和析构函数的执行顺序。6、掌握利用访问声明调整基类成员在派生类中的访问属性。二、试验内容1、已有类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; ;2、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。3、给出下面的基类: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)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。实验四 多态性一、实验目的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 &);/运算符重载函数,实现两个时间的相加 Time operator+();/运算符重载函数,实现两个时间的相加 void disptime();/显示时间函数 private: int hours,minutes,seconds;3、写一个程序,定义抽象类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_area()和volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C+的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。 4、设计一个点类Point,其结构如下:(1) Point类表示二维平面点的集合,数据成员由点的坐标值表示,类型为int;(2) 三个重载构造函数:a) 一个是无参数的构造函数;b) 一个是带坐标值参数的构造函数,实现对数据成员的初始化;c) 一个是copy构造函数,实现用一个对象初始化本对象;(3) 两个重载成员函数:a) void offert(int , int ); 实现点的偏移,参数是偏移量;b) void offert(Point &); 实现点的偏移,参数Point类对象是偏移量;(4) 6个运算符重载函数:a) bool operator = = (Point &);判断两个点对象是否相等;b) void operator + =(Point &);将两个点对象相加;c) void operator +();将当前对象自增1(前缀);d) void operator +(int );将当前对象自增1(后缀);e) friend Point& operator + (Point &, Point &);将两个点对象相加;f) friend Point &operator (Point &, Point &);将两个点对象相减;(5) 两个成员函数提供实例对象对私有数据的访问:a) int GetX();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论