很简单,copy这份代码,运行一下就知道了!

代码:

#include <iostream>
using namespace std ;

class Point 
{
 friend ostream &operator<<(ostream&, const Point&) ;
 public:
 Point(int=0, int=0);
 void setPoint(int, int) ;
 int getX() const { return x ;}
 int getY() const { return y ;}
 protected:
 int x, y ;
} ;

ostream &operator<<(ostream& output, const Point& p)
{
 output << "X: " << p.x << " Y: " << p.y << endl ;
 return output ;
}

Point::Point(int x, int y)
{
 this->x = x ;
 this->y = y ;
}

class Circle: public Point
{
 friend ostream &operator<<(ostream&, const Circle&);
 public:
 Circle(double r = 0.0, int x =0, int y=0) ;
 void setRadius(double r) { radius = r ; }
 double getRadius() const { return radius ; }
 double area() const ;
 private:
 double radius ;
 
} ;

ostream &operator<<(ostream& output, const Circle& c)
{
 output << "Center_X: " << c.x << "  Center_Y: " << c.y << endl ;
 output << "Radius: " << c.radius << endl ;
    return output ;
}

Circle::Circle(double r , int x, int y)
{
 radius = r ;
 this->x = x ;
 this->y= y ;
}

double Circle::area() const
{
 return 3.14*radius*radius ;
}

int main()
{
 class Point p(0,0) ;
 class Point *pptr ;
 class Circle c(2,6,6) ;
 class Circle *cptr ;
 
 cout << p ;
 /*-------------------------*/
 pptr = &c ;          //refer to a derive-class object with
                      //a base-class pointer
 cout << *pptr ;      //lose data
 /*-------------------------*/
 cptr = &c ;          //refer to a derive-class object with
                      //a derive-class pointer 
 cout << *cptr ;
 /*-------------------------*/
 cptr = &p ;          //refer to a base-class object with
                      //a derive-class pointer
 cout << cptr ;       //syntax error
 /*-------------------------*/
 return 0 ;
}