(1).定义一个point类,对其重载++、- -、<<、>>运算符,并在主函数中对其进行测试。
答:
<span style="font-size:14px;">#include<iostream>
using namespacestd;
class Point
{
public:
Point(int X=0,int Y=0):x(X),y(Y){}
Point& operator++(); //前置单目运算,点的x,y坐标都发生变化
Point& operator--(); //前置单目运算,点的x,y坐标都发生变化
friend ostream &operator<<(ostream &out,const Point &P); //运算符<<重载
friend istream &operator>>(istream &in,Point &P); //运算符>>重载
public:
int x,y;
};
Point&Point::operator ++ ()
{
++x;
++y;
return *this;
}
Point&Point::operator -- ()
{
--x;
--y;
return *this;
}
ostream &operator<<(ostream &out,const Point &P)
{
out<<"Point("<<P.x<<","<<P.y<<")"<<endl;
return out;
}
istream &operator>>(istream &in,Point &P)
{
in>>P.x>>P.y ;
return in;
}
int main()
{
Point P1(1,2),P2,P3;
cout<<"THe DefaultValues:"<<endl;
cout<<P1<<P2;
++P1;
--P2;
cout<<"AFter to the right andupside:";
cout<<"P1="<<P1;
cout<<"After to the left anddown:";
cout<<"P2="<<P2;
cout<<"Please input X Y"<<endl;
cin>>P2;
cout<<P2;
return 0;
}
</span>
(2).请写一个抽象类Shape,它有两个私有数据成员X、Y,表示一个点的坐标,有一个无参构造函数和有参构造函数,有用于几何图形计算面积(GetArea)和计算周长(GetPerim)的纯虚函数。通过抽象类Shape派生出矩形类Rectangle和圆类Circle。在主函数中定义一个Rectangle对象和一个Circle对象,计算并显示出它们的面积和周长。
答:
<span style="font-size:14px;">#include<iostream>
#define PI 3.1416
using namespace std;
class Shape
{
public:
virtualdouble Get_Area() const=0; //纯虚函数
virtualdouble Get_Perim() const=0; //纯虚函数
virtualvoid display()const=0;
Shape(intX=0,int Y=0){x=X;y=Y;};
private:
intx,y;
};
class Point
{
public:
Point(){x=0;y=0;};
Point(intX,int Y):x(X),y(Y)
{
}
Point(Point&r)
{
*this= r;
}
intGet_X() const {return x;};
intGet_Y() const {return y;};
Point&operator=(Point &t)
{
x= t.x;
y= t.y;
return*this;
}
private:
intx,y;
};
class Rectangle:public Shape
{
public:
Rectangle(){};
Rectangle(Point&p1, Point &p2)
{
point1= p1;
point2= p2;
}
double Get_Area() const; //要和父类的声明一致
double Get_Perim() const; //调用此函数的display是const 这里也要定义为const
voiddisplay()const; //覆盖基类的虚函数
private:
Pointpoint1,point2;
} ;
double Rectangle::Get_Area() const
{
return((point2.Get_X()-point1.Get_X())*(point2.Get_Y()-point1.Get_Y()));
}
double Rectangle::Get_Perim() const
{
return(2*(point2.Get_X()-point1.Get_X())+2*(point2.Get_Y()-point1.Get_Y()));
}
void Rectangle::display() const
{
cout<<"Therectangle's area: "<<Get_Area()<<endl;
cout<<"Therectangle's perim: "<<Get_Perim()<<endl;
}
//********************************************
class Circle:public Shape
{
public:
Circle();
Circle(int&r)
{
radius= r;
}
doubleGet_Area()const;
doubleGet_Perim()const;
voiddisplay()const; //覆盖基类的虚函数
private:
intradius;
};
double Circle::Get_Area() const
{
returnPI*radius*radius;
}
double Circle::Get_Perim() const
{
return2*PI*radius;
}
void Circle::display() const
{
cout<<"Thecircle's area: "<<Get_Area()<<endl;
cout<<"Thecircle's perim: "<<Get_Perim()<<endl;
}
int main()
{
intx,y,radius;
cout<<"point1(x,y)=";
cin>>x>>y;
Pointpoint1(x,y);
cout<<"point_2(x,y)=";
cin>>x>>y;
Pointpoint2(x,y);
RectanglemyRec(point1,point2);
myRec.display();
cout<<"Pleaseinput radius: ";
cin>>radius;
CirclemyCir(radius);
myCir.display();
return0;
}</span>