C++实验六
实验六 类与对象(二)
【实验目的】
1、掌握类的构造函数和析构函数的概念和使用方法;
2、掌握对象数组、对象指针的定义和使用方法;
3、掌握new和delete的使用方法;
【实验内容】
1、 设计描述平面坐标上的点CPoint类,该类满足下述要求:
•具有x,y坐标信息;
•具有带默认形参值的构造函数,参数分别用于初始化x和y坐标信息;
•具有获取x、y信息的GetX和GetY函数,具有设置x、y信息的SetX和SetY函数;
2、 设计一个矩形类CRectangle,该类满足下述要求:
•具有矩形的左下角和右上角两个点的坐标信息,这两个点的数据类型是CPoint;
•具有带参数的构造函数CRectangle(const CPoint &, const CPoint &),参数分别用于设置左下角和右上角两个点的坐标信息;
•具有设置左下角和设置右上角的两个点坐标的功能SetLPoint(const CPoint &)和SetRPoint(const CPoint &);
•具有获得周长(GetPerimeter)和获得面积(GetArea)的功能。
3、 在main函数中,完成以下工作:
•动态创建一个CRectangle类的对象a_rectagnle,其初始的左下角和右上角坐标分别为(2,5)、(6,8);调用GetPerimeter和GetArea获得矩形周长和面积,并将周长和面积显示在屏幕上;
•调用SetLPoint设置a_rectagnle的左下角为(4,6),调用SetRPoint设置a_rectagnle的右上角为(7,9);调用GetPerimeter和GetArea获得矩形周长和面积,并将周长和面积显示在屏幕上;
•销毁该动态创建的对象。
1 #include<iostream> 2 using namespace std; 3 class CPoint 4 {public: 5 CPoint(float x=0,float y=0){this->x=x;this->y=y;} 6 float GetX(){ return x;} 7 float GetY(){ return y;} 8 void SetX(float x){ this->x=x;} 9 void SetY(float y){ this->y=y;} 10 private: 11 float x,y; 12 //数据域 13 }; 14 class CRectangle 15 {public: 16 CRectangle(){} 17 CRectangle(const CPoint &LPoint,const CPoint &RPoint){ this->LPoint=LPoint;this->RPoint=RPoint;} 18 void SetLPoint(CPoint lp){ LPoint.SetX(lp.GetX()); LPoint.SetY(lp.GetY()); } 19 void SetRPoint(CPoint rp){ RPoint.SetX(rp.GetX()); RPoint.SetY(rp.GetY()); } 20 float GetPerimeter(){return 2*(RPoint.GetX()-LPoint.GetX()+RPoint.GetY()-LPoint.GetY());} 21 float GetArea(){ return (RPoint.GetX()-LPoint.GetX())*(RPoint.GetY()-LPoint.GetY());} 22 private: 23 CPoint LPoint,RPoint; 24 }; 25 int main(){ 26 CPoint p1(2,5),p2(6,8); 27 CRectangle *p=new CRectangle(p1,p2);//动态创建一个CRectangle类的对象 28 cout<<"the Initial RectanglePerimeter: "<<p->GetPerimeter()<<endl;//获得矩形周长 29 cout<<"the Initial RectangleArea: "<<p->GetArea()<<endl;//获得矩形面积 30 CRectangle a_rectagnle; 31 CPoint p3(4,6),p4(7,9); 32 a_rectagnle.SetLPoint(p3);//设置a_rectagnle的左下角为(4,6) 33 a_rectagnle.SetRPoint(p4);//设置a_rectagnle的右上角为(7,9) 34 cout<<"the changed RectanglePerimeter: "<<a_rectagnle.GetPerimeter()<<endl;//获得矩形周长 35 cout<<"the changed RectangleArea: "<<a_rectagnle.GetArea()<<endl;//获得矩形面积 36 delete p; 37 return 0; 38 }
【错误及改正方法】:一:开始不明白this指针的使用方法,把类内数据成员和形参搞混了;改正方法,了解了this指针的使用方法