C++程序设计课后习题及解答(第八章)


(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>


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值