面向对象实验指导书.doc_第1页
面向对象实验指导书.doc_第2页
面向对象实验指导书.doc_第3页
面向对象实验指导书.doc_第4页
面向对象实验指导书.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

全国高等教育自学考试课程面向对象程序设计实践指导书一、 实践目的C+语言程序设计上机操作实验是本课程必不可少的实践环节。上机实验的目的是使考生熟悉用高级语言解题的全过程,加深对语言的理解,得到程序设计基本方法和技巧的训练,从而能真正掌握C+语言这种工具,来解决实际问题。二、 实践内容实验一 练习设计、使用类并熟悉C+编程环境1、 目的要求1 熟悉C+程序的开发环境Microsoft Visual C+ 6.0。2 掌握从编辑含有类的C+源文件、存取文件、编译文件到运行的全过程。3 掌握单步执行和调试C+程序的基本方法。4 初步掌握类的设计和使用类的对象。2、 实验内容1 调试下列程序,熟悉C+环境的基本使用方法。 #include #define M_PI 3.14156 double cylinder(int ra, int hi);void main() int radius,high; double volume; cout “Please input two numbers:”radiushigh; volume=cylinder(radius,high); cout “radius:”radius “high:”highendl; cout “The volume is” volumeendl; double cylinder(int ra, int hi) return hi*M_PI*ra*ra;2 按下列要求编程并调试程序。建立用于完成复数算术运算的类Complex。编写一个程序测试该类。复数的形式如下:real+imaginary*I用浮点变量表示类中的私有数据成员。给类提供一个能够对所声明的对象初始化的构造函数。为了能够在不提供初始化值的情况下也能对对象初始化,构造函数中应该包含默认的值。给类提供能够完成如下功能的公有成员函数:两个复数相加,即实部和实部相加,虚部和虚部相加。两个复数相减,即实部和实部相减,虚部和虚部相减。以(a, b)的格式输出结果(a是实部,b是虚部)。3 按下列要求编程并调试程序。建立用于完成分数形式算术运算的类RationalNumber。编写一个程序测试该类的程序。用整数变量表示类的私有数据成员(即分子和分母)。该类的构造函数应该以最简分数形式存储数据。公有成员函数应该有以下功能:两个有理数相加,以最简分数形式保存结果。两个有理数相减,以最简分数形式保存结果。两个有理数相乘,以最简分数形式保存结果。两个有理数相除,以最简分数形式保存结果。以a/b的形式输出有理数。(a是分子,b是分母)以浮点形式输出有理数。4 按下列要求编程并调试程序。声明一个名为SimpleCircle的简单圆类,其数据成员int *itsRadius为一个指向其半径值的指针,设计对数据成员的各种操作,给出这个类的完整实现并测试这个类。5 按下列要求编程并调试程序。编程求生日是星期几。(本题参考程序:)/* * * * * * * */类定义部分/* * * * * * * *#includestruct Date int month; int day; int year;class TdateType public: TdateType(Date b); /构造函数 void Modify(int m = 1,int d = 2,int y = 1999); /修改日期 void Next(); /明天 void Previons(); /昨天int Weekday(); /星期几 void Print(); /打印日期 protected: Date a; /日期结构数据成员 int IsLeapYear(); /保护成员函数,是闰年否 int NonthEnd(int m); /某月的天数;/ * * * * * * * * * * * * * * * * * * * * * * * * */以下为类的成员函数实现部分/ * * * * * * * * * * * * * * * * * * * * * * * * *TdateType:TdateType(Date b)a.month = b.month;a.day = b.day;a.year = b.year; void TdateType:Modify(int m,int d,int y) a.month = m; a.day = d; a.year = y;void TdateType:Next()a.day +;if( a.day MonthEnd(a.month) ) a.day = 1; a.month + if ( a.month 12) a.month = 1;a.year +; void TdateType:Previous() a.day -; if ( a.day 1 ) a.month -;if (a.month 1 )a.month = 12;a.year -; a.day = MonthEnd(a.month); int TdateType:IsLeapYear() return ( (a.year % 4 = = 0 & a.year % 100 != 0 ) | (a.year % 400 = = 0) )int TdateType:MonthEnd(int m) switch(m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11:return 30; case 2: if (IsLeapYear() return 29; else return 28; return 0; /needlessint TdateType:WeekDay() long n; n = (a.year 1) * 365; /直至去年的天数(不考虑闰年) n + = (a.year 1)/4; /以下3句考虑闰年数 n - = (a.year 1)/100; n + =(a.year 1)/400; for ( int i = 1;ia.month;i+) /本年直至上月的天数 n += monthEnd(i); n += a.day; /本月的天数 n % = 7; /折成星期几,若0,则为星期日 return n;void TdateType:Print() cout a.year”年” a.month”月” a.day”日” switch (WeekDay ( ) ) case 0:cout”Sunn”;break; case 1:cout”Monn”;break; case 2:cout”Tuen”;break; case 3:cout”Wedn”;break; case 4:cout”Thun”;break; case 5:cout”Frin”;break; case 6:cout”Satn”;break; / * * * * * * * * * * * * * * * * * * * * * * * /以下为应用程序部分/ * * * * * * * * * * * * * * * * * * * * * * * void main() Date a = (4,22,1999); TdateType oneday(a); oneday.Print(); oneday.Next(); oneday.Print(); oneday.Modify(2,15); oneday.Print(); oneday.Previous(); oneday.print();实验二 熟悉类的特征1、 目的要求1 掌握C+的类的基本组成及其派生方法;2 学会使用构造函数、析构函数及成员函数;3 掌握构造函数、析构函数及成员函数的调用顺序;4 进一步认识C+面向对象的程序设计机制。2、实验内容1按下列要求编程并调试程序。假设我们已开发了一个Location类,这个类描述屏幕上一个点的位置,成员函数用于计算两个点的距离。下面是Location类的头文件Location.h。/Location.h# if !defined(LOCATION_H)# define LOCATION_HClass Location private:int x,y;public:Location(int,int);int getX()return x;int getY()return y;distance(Location &);Location();# endif编写一个Location.cpp文件,给出没有实现的成员函数。要求在构造函数中给出创建不同对象时给出可供区别对象的信息,对析构函数的要求与此相同。测试点为(-10,20)和(-40,60)。再用Location类定义一个椭圆类ellipse,对构造函数和析构函数的要求与Location类相同。从椭圆类派生圆类circle,对构造函数和析构函数的要求与Location类相同。使用Location类的成员函数distance求屏幕上一个圆的圆心和一个椭圆圆心之间的距离。2按下列要求编程并调试程序。定义一个Shape基类,在此基础上派生出Rectangle和Circle类,二者都有getArea()函数计算对象的面积;再使用Rectangle类创建一个派生类Square。最后创建这三个类的对象进行测试,输出各自的面积。本题参考代码:#include class Shapeprivate:int x,y;public:Shape(int a, int b)x=a; y=b;double getArea()return 0.0;Shape()cout”nDistructor of shape is called.”endl;class Rectangle: public Shapeprivate: int w, h;public:Rectangle(int a, int b, int c, int d): Shape(a,b) w=c; h=d;double getArea()return (double)w*h; Rectangle()cout”nDistructor of rectangle is called.”endl;class Circle: public Shapeprivate: int r;public:Circle(int a, int b, int c): Shape(a,b) r=c;double getArea()return 3.14159*r*r; Circle()cout”nDistructor of circle is called.”endl;class Square: public Rectanglepublic:Square (int a, int b, int c): Rectangle (a,b,c,c) Square ()cout”nDistructor of square is called.”endl;void main()Rectangle r(10,20,30,20);Circle c(10,20,10);Square s(10,20,30);cout”矩形r的面积为:”r.getArea()endl;cout”圆c的面积为:”c.getArea()endl;cout”正方形s的面积为:”s.getArea()endl;实验三 多态性练习1、 目的要求1掌握由继承和虚函数获得多态性的方法;2学会利用成员函数访问类的对象的私有成员。2、实验内容按下列要求编程并上机调试运行。1使用继承和虚函数编写一个程序,用于计算正方形、三角形和圆的总面积。本题参考代码如下:/Shape.hclass Shapepublic:virtual float getArea()=0;float total(Shape * s, int n)float sum=0;for(int i=0; igetArea();return sum;/Shape.cpp#include #include “Shape.h”class Triangle:public Shapeprotected:float h,w;public:Triangle(float a, float b)h=a; w=b;float getArea()return w*h*0.5;class Rectangle:public Trianglepublic:Rectangle(float a, float b):Triangle(a, b)float getArea()return w*h;class Circle:public Shapeprotected:float radius;public:Circle(float r)radius=r;float getArea()return radius*radius*3.14159;void main()Shape *s4;s0=new Triangle(3.0,4.0);s1=new Rectangle(2.0,4.0);s2=new Circle(5.0);s3=new Circle(8.0);float sum=total(s,4);coutsumendl;2有一个汽车类vehicle,将它作为基类派生小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。3利用多态性,建立一个小型公司的人员信息管理系统。该公司主要有三类人员:经理、兼职技术人员、销售经理和兼职推销员。要求存储这些人员的姓名、编号、级别、当有薪水,计算月薪总额并显示全部信息。 4建立一个堆栈类,设计其数据成员及对数据成员的各种操作,给出这个类的完整实现并测试这个类。 本题参考代码如下:#include#define MAX 5class stackint numMAX;int top;public:stack(void);stack(void);void push(int n);int pop(void);stack: : stack(void)top=0;cout “Stack initiatized.”endl;stack: : stack(void)cout “stack destroyed.”endl;void stack: : push(int n)if(top= =MAX)cout “stack is full!”endl;return;numtop=n;toptt;int stack: : pop(void)top- -;if(top0)cout “stack is underflow!”endl;return 0;return numtop;main()stack a, b;int i;coutendl;for(i=1; i=MAX; i+)a.push(Z*i);for(i=1; i=MAX; i+)couta.pop( ) “ “;coutendl;for(i=1; i=MAX; i+)a.push(Z*i);for(i=1; i=MAX; i+)b.push(a.pop( );for(i=1; i=MAX; i+)coutb.pop( ) “ “;coutendl;return 0;实验四 运算符重载和流类库的练习1、 目的要求1 了解运算符重载的基础知识;2 掌握怎样重定义与新类一起使用的运算符。3 了解流类库的概念;4 练习使用流类库进行文件存取。2、 实验内容 编程序并上机调试运行。1 建立类rationalNumber(分数类),使之具有下述能力:建立构造函数,它能防止分母为0、当分数不是最简形式时进行约分以及避免分母为负数等等。重载加法、减法、乘法以及除法运算符。重载关系运算符和相等测试运算符。2 开发一个电话号码类PhoneNumber,重载其流提取运算符和流流插入运算符。参考程序如下:#include class PhoneNumber friend ostream &operator(istream &,const PhoneNumber &);private: char areaCode4; char exchange4; char line5;ostream &operator(ostream &output,const PhoneNumber & num)output”(”num.areaCode”)”num.exchange(istream &input,const PhoneNumber &num)input.ignore();input.getline(num.areaCode,4);input.ignore(2);input.getline(num.exchange,4);input.ignore();input.getline(num.line,5);return input;main() PhoneNumber phone;cout”Enter a phone number in the”phone;cout”The phone number entered was:n”phoneendl;return 0;3 建立一个磁盘文件,其内容是090之间每隔5的正弦值。参考程序如下:#include#include#include#define PI 3.14159main()float S19;int i, a;ofstream out(“fsin.bny”);if(!out)cout”Cannot open file.”endl;return 1;for(i=0,a=-5; i19; i+)a+=5;Si=sin(a*PI/180.0);out.write(unsigned char*)&s, sizeof s);out.close( );return 0; 把实验所建立的文件的内容读出并打印。参考程序如下:#include#includemain()float S19;int i, a;ifstream in(“fsin.bny”);if(!in)cout “Cannot open file.”endl;return 1;in.read(unsigned char*)s, sizeof s);coutendl;cout “ i sin(i)”endl;for(i=0, a=-5; i19; i+)a+=5;cout “aSi”endl;in.close( );return 0;实验五 模板的练习1、 目的要求1 了解函数模板的概念;2 练习编制函数模板。2、 实验内容按下列要求编程并上机调试运行:用模板函数实现三个数值中按最小值到最大值的排序程序。参考代码如下:#include template void sort(T x, T y, T z)T tmp;if (xy) tmp=x; x=y; y=tmp;if (xz) tmp=x; x=z; z=tmp;if (yz) tmp=y; y=z; z=tmp;cout”n”x”t”y”t”zendl;void main()int x=6, y=3, z=5;double a=3.4, b=1.1, c=6.8;char c1=S, c2=D, c3=F;sort(x, y, z);sort(a, b, c);sort(c1,c2,c3);实验六 综合练习1、 目的要求1 学会编制结构清晰、风格良好、符合C+程序设计语言规则的程序;2 学会编制能体现C+面向对象优点的程序。2、 实验内容编程序并上机调试运行。1调试教材第9章9.3节的2个例子并理解其实现原理。2理解教材9.3.2中的格式输出控制。3参考教材9.3.2节的例子重新设计9.3.1节例子中的Show()成员函数,并增加一个PrintData函数,实现PrintData(d)式的显示方式。本题参考代码如下:/创建一个公共的父类#include Class Furnitureprotected:int color;int width,height;public:Furniture(int, int, int);int getColor()return color;int getWidth()return width;int getHeight()return height;virtual void Show();Furniture: Furniture(int c, int w, int h)color=c; width=w; height=h;void Furniture:Show()coutendl;cout.setf(ios:left);coutsetw(10)”color=”colorendl;cout.setf(ios:left);coutsetw(10)”width=”widthendl;cout.setf(ios:left);coutsetw(10)”height=”heightendl;/使用父类来简化BookShelf类class BookShelf: public Furnitureint shelves;public:BookShelf (int, int, int ,int);int getShelves()return shelves;void show();BookShelf: BookShelf(int c, int w, int h, int s): Furniture(c, w, h)shelves=s; void BookShelf:Show()coutendl;Furniture:Show();cout.setf(ios:left);coutsetw(10)”shelves=”shelvesendl;/使用父类来简化Table类class Table: public Furnitureint drawers;int material;public:Table

温馨提示

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

评论

0/150

提交评论