您好,欢迎访问三七文档
《面向对象程序设计》实验指导书C++语言上机操作基本与要求:(1)计算机的硬件配置目前个人电脑的配置一般都很高,P2或者是P3的CPU,内存基本上都是128兆或者以上,符合C++的最低要求。最低的配置只要286或者386以上的主机,32兆内存即可满足要求。(2)计算机的软件配置1、操作系统Windows95及以上。2、BorlandC++3.1或者5.0;或者是VisualC++5.0获6.0。建议大家用BorlandC++3.1,因为VC的操作很复杂,需要编程者对它有足够的了解,用起来不如BC方便。编程时只需要打开桌面上BC3.1快捷方式即可进行编程、编译、运行和调试程序了。实验一练习设计、使用类并熟悉编程环境实验目的:学会定义类学会构造类的方法领会面向对象程序设计的方法熟悉编程环境实验内容:(1)设计一个用来表示直角坐标系上点的位置的Location类,然后在主程序中创建两个对象A和B,要求A在第三象限,B在第二象限,计算给定两点之间的距离并按如下格式输出结果:A(x1,y1),B(x2,y2)Distance=d其中x1,y1,x2,y2为指定值,d为计算结果。分析:这是一个很简单的类的设计。首先我们要清楚这个类要有几个成员和成员函数。一个点起码要有X坐标和Y坐标,所以我们给其添加两个私有成员;接着要有起码的构造函数和析构函数;最后根据题目要求,我们在设计一个成员函数,用来求两点之间的距离。程序源代码如下:程序头文件放在Location.h中//Location.h//这是输入输出流所要包含的头文件#includeiostream.h//这是要进行数学计算所要包含的头文件#includemath.hclassLocation{//横坐标和纵坐标:private:intX,Y;public:Location(inta,intb);//构造函数doubledistance(Location&);//求两点距离的函数~Location();//析构函数};//在构造函数中对类的成员进行初始化Location::Location(inta,intb){X=a;Y=b;}//求两点的距离//这里我们用的公式是,两点之间的//距离=//(x1,y1)和(x2,y2)为两点的坐标doubleLocation::distance(Location&loc1){doublelength:length=sqrt((loc1.X-Location::X)**2+(loc1.Y-Location::Y)**2));//注意这里的作用域符号::表示X和Y是属//于Location类的returnlength;}//由于我们在这个程序里没有用//new来开辟内存,所以析构函数为空Location::~Location(){}再在Location.cpp文件中编写主程序//Location.cpp#includeLocation.h#includeiostream.h#includemath.hvoidmain(){//先定义Location类的两个对象A和B//并调用构造函数对其进行初始化LocationA(-10,-20),B(-30,40);//输出A(x,y),B(x,y)coutA(A.X,A.Y),B(B.X,B.Y)endl;//输出distance=?coutDistance=A.distance(B)endl;}注意:.h文件和.cpp文件要放在同一个目录下面,如果不是放在同一个目录下面的话,那么在.cpp文件中要在#includeLocation.h语句中加上Location.h文件所在地的整个目录名,例如:#included:\Borland\user\location\Location.h,这样的话,编译时才会不出错。实验思考:大家可以用指针和引用来改写这个程序,然后和原来的程序比较,看有什么区别。(2)把这个Location类的对象作为Rectangle类的对象的一个成员,即坐标平面上的一个矩形由一个位置和矩形的长和宽决定。设计矩形类Rectangle并输出给定点x1和y1的值及长和宽的值。//先定义类和类的成员函数//文件名为Rectange.h//由于Rectangle类中要有Location类的对象//所以必须包括Location类的声明文件#includeLocation.h#includeiostream.h#includemath.hclassRectange{private://定义矩形长和宽intlength,width;//定义矩形左上点Locationupleft;public://定义矩形的构造函数和析构函数Rectange(inta,intb,intlength,intwidth);~Rectange();};Rectangle::Rectangle(inta,intb,intlen,intwid){//初始化Rectangle类的length和widthlength=len;width=wid;//这里通过调用Location类的构造函数//来初始化Rectangle类的对象upleftupleft=newLocation(a,b);}Rectangle::~Rectangle(){deleteupleft;}//在构造函数中用new开辟了内存空间upleft,//所以在析构函数中用delete删除它}再在CPP文件中编写主程序代码://Rectangle.cpp//包括下面三个头文件的原因在前面已讲过#includeRectangle.h#includeiostream.h#includemath.hvoidmain(){RectangleA(-10,-20,60,40);//定义了一个长为60,宽为40,左上点为(-10,-20)//的矩形,下面将其输出cout矩形左上点为:(A.upleft.x,A.upleft.y)endl;//A.upleft是Location的成员对象,所以A.upleft.x//表示输出的是左上点的x坐标,A.upleft.y表示输//出的是左上点的y坐标,即-10和-20cout矩形的长为:A.lengthendl;//输出为60cout矩形的宽为:A.widthendl;//输出为40}(3)熟悉C++环境。大家在编织程序的过程中,要尽量的熟悉BorlandC++的编程环境,了解BC中关于路径的设置,对于主菜单的各个命令要熟悉它的操作过程,编完程序后可以对程序进行小的修改,用来了解程序的流程,以及各个命令的功能。实验二多态性练习实验目的:掌握由继承和虚函数获得多态性的方法;学会利用成员函数访问类的对象的私有成员;进一步掌握类的设计,熟悉C++编程。实验内容:(1)用虚函数设计一个描述正方形的类Square,并具有计算面积的成员函数GetArea()。从Square类派生一个矩形类Rectangle,Rectangle也使用GetArea()函数计算面积。分析:这是一个类继承问题。先设计一个正方形类,定义一个protected对象edge作为正方形的边长;然后把成员函数GetArea()设计成虚函数,因为派生类Rectangle也要用到GetArea()来求矩形的面积;然后是构造函数和析构函数。接着设计矩形派生类Rectangle,并公有继承基类Square,矩形派生类的成员函数GetArea()用来求矩形面积。其中代码的分析在源程序给出。头文件SquareRectangle.h源代码如下://SquareRectangle.h#includeiostream.h#includemath.hclassSquare{protected:intedge;//edge为protected对象,所以派生类公有继承基类//Square时,edge也为派生类的protected对象,派//生类可直接调用。public:virtualdoubleGetArea();//定义为虚函数,所以派生类调用它时//采用动态联编,易于编程人员编写Square(intedg);~Square(){}};Square::Square(intedg){edge=edg;}//求正方形的面积doubleSquare::GetArea(){doubleresult;result=edge*edge;retureresult;}//下面的全局函数是专门为了//动态调用虚函数而设计的//函数体的声明在源代码的最后面voidobjGetArea(Square*base);classRectangle:publicSquare{protected:intlength;//它的宽由正方形类Square的成员提供public:doubleGetArea();Rectangle(intedg,intleng);~Rectangle(){}};//求矩形的面积doubleRectangle::GetArea(){doubleresult;result=length*edge;returnresult;}//这里由于edge是公有继承基类Square的//protected对象,因此可直接调用。Rectangle::Rectangle(intedg,intleng):Square(intedg){//这里采用成员列表的形式初始化类的成员//Square(intedg)调用基类的构造函数//使edge=edg;length=leng;}voidobjGetArea(Square*obj){obj-GetArea();}在SquareRectangle.cpp中给出主函数main()的源代码://SquareRectangle.cpp#includeiostream.h#includemath.h#includeSquareRectangle.hmain(){SquareSqua1(100);//调用Square::Square(int)初始化RectangleRect(200,300);//调用Rectangle::Rectangle(int,int)初始化//比较下面两个语句cout正方形Squa1(100)的面积为:Squa1.GetArea()endl;//输出为:10000cout正方形Squa1(100)的面积为:objGetArea(&Squa1)endl;//输出为:10000//比较下面两个语句cout派生矩形Rect(200,300)的面积为::Rect.GetArea()endl;//输出为60000cout派生矩形Rect(200,300)的面积为::objGetArea(&Rect)endl;//输出为60000}注意:使用虚函数要注意的地方是,不要在引用虚函数的时候,采用作用符:或者是::,这样就可能会变成静态联编,根本不能表现虚函数的优越性。所以我们在调用虚函数时,通常采用的是指针或引用。就像是上例中的全局函数objGetArea(Square*obj)一样,编译系统会根据实际情况确定是哪一个类在调用虚函数,如果是采用作用符,就失去了虚函数的意义了,就像在主程序中要求比较的四个语句一样,其中一个是动态连编,一个是静态连编。另外,参数传递时要注意一一对应,在调用objGetArea(Square*)时,一定要在类Squa或Rect前面加&,表示是类Squa或Rect的地址,这样才与指针相对应。实验思考:除了用全局函数来调用虚函数外,大家还能用别的方法吗?试编写一例。实验三运算符的重载实验目的:了解运算俯重载的基础知识;学会运算符重载的编程。实验内容:为complex复数类重载+、++以及*三个友元运算符,并在主程序中进行简单的验算,要求要考虑周全。分析
本文标题:C++实验指导书
链接地址:https://www.777doc.com/doc-4285606 .html