很简单,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 ;
}