华科C++第七次上机作业(3页).docx
-华科C+第七次上机作业-第 3 页第七次上机作业1、 范例:设计并测试一个矩形类(Rectangle)。属性为矩形的左下角与右上角的坐标,矩形水平放置。操作为计算矩形的周长和面积。 2、 #include<cmath>3、 #include<iostream>4、 using namespace std;5、 class Rectangle6、 double left, top;7、 double right, bottom;8、 public:9、 Rectangle(double l=0,double t=0,double r=0,double b=0);10、 Rectangle();11、 void Assign(double l,double t,double r,double b);12、 void Show();13、 double Area();14、 double Perimeter();15、 Rectangle: Rectangle(double l ,double t, double r, double b)16、 left=l ;top =t;17、 right=r; bottom=b;18、 void Rectangle:Assign(double l,double t,double r,double b)19、 left=l ;top =t;20、 right=r; bottom=b;21、 void Rectangle:Show()22、 cout<< "left-top point is("<<left<<","<<top<<")"<<"n"23、 cout<<"right-bottom point is("<<right<<","<<bottom<<")"<<endl;24、 double Rectangle:Area()25、 return fabs(right-left)*fabs(bottom-top);26、 double Rectangle:Perimeter()27、 return 2*(fabs(right-left)+fabs(bottom-top);28、 int main()29、 Rectangle rect;30、 rect.Show();31、 rect.Assign(100,200,300,400);32、 rect.Show();33、 Rectangle rect1(0,0,200,200);34、 rect1.Show();35、 rect1.Assign(100,200,300,400);36、 rect1.Show();37、 cout<<"Ãæ»ý"<<rect.Area()<<'t'<<"Öܳ¤"<<rect.Perimeter()<<endl;38、 cout<<"Ãæ»ý"<<rect1.Area()<<'t'<<"Öܳ¤"<<rect1.Perimeter()<<endl;39、 return 0;(1) 将Rectangle(double l=0, double t=0, double r=0, double b=0); 改为Rectangle(double l, double t, double r, double b);程序仍能正确运行吗?为什么?答:无法正确运行,因为数据成员没有初值。(2) 注意成员函数void Show( )、double Area () 、double Perimeter( )的使用,因为在第三章如果需编写类似功能的一般函数是需要带参数(形参)的。而在此处作为类的成员函数又不需要带参数。思考为什么? 答:构造函数是隐式调用的(3) 理解void Assign(double l,double t,double r,double b);函数的作用。将Rectangle(double l=0, double t=0, double r=0, double b=0); 改为Rectangle(double l, double t, double r, double b);这时,有人认为Rectangle(double l, double t, double r, double b) 和void Assign(double l,double t,double r,double b)的功能相同,那么Assign 函数能否去掉呢?请试一试,结果会怎样?答:不能,结果无法运行。2、 定义一个圆类(Circle),要求用两种方法定义: 方法一: 要求属性为半径,操作为计算圆的周长和面积。#include <iostream>#include <cmath>using namespace std;const double PI=3.14;class Circleprivate:double Radius;public :Circle(double r=0);Circle();void Assign(double r); double zc(); double mj();Circle:Circle(double r)Radius=r;void Circle:Assign( double r)Radius=r;double Circle:zc()return (PI*Radius*2);double Circle:mj()return (PI*Radius*Radius);int main ()Circle yuan;yuan.Assign(13.45);cout<<"周长"<<yuan.zc()<<endl;cout<<"面积"<<yuan.mj()<<endl;return 0;方法二: 要求属性为半径(radius)、圆周长和面积,操作为输入半径,并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。