p98temp.cpp
上传用户:chaiyuqiu
上传日期:2022-08-03
资源大小:27k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. #include <iostream.h>
  2. #define Pi 3.1415926
  3. class Point {
  4. friend ostream &operator << (ostream &, const Point &);
  5. public:
  6.    Point ( float x = 0, float y = 0 ) : x(x) , y(y) { } ; //默认的构造函数
  7.    void setPoint ( float, float ); //设置坐标值
  8.    float getX ( ) const { return x; } //取得x坐标值
  9.    float getY ( ) const { return y; } //取得y坐标值
  10. protected: //允许派生类访问
  11.    float x, y; //点(类Point的对象)的坐标值
  12. };
  13. class Circle : public Point { //类Circle继承了类Point
  14. friend ostream &operator << ( ostream &, const Circle & );
  15. public:
  16.    Circle ( float r = 0.0, float x = 0, float y = 0 ):
  17. radius(r) { center.x = x; center.y = y; };  //默认的构造函数
  18.    void setRadius ( float ); //设置半径值
  19.    float getRadius ( ) const { return 2*radius; } //取得半径值
  20.    float area ( ) const { return Pi*Pi*radius; } //计算圆面积
  21. protected:
  22.    float radius;
  23.    Point center;
  24. } ;
  25. ostream & operator << (ostream& os, const Point & p) {
  26.     os << endl << "the point is located at ( " ;
  27.     os << p.x << "," << p.y << ")" << endl;
  28.     return os;
  29. }
  30. ostream & operator << (ostream& os, const Circle & c) {
  31.     os << "the center of circle is located at ( ";
  32.     os << " )" <<endl;
  33.     os << "the radius is " << c.radius << endl;
  34.     return os;
  35. }
  36. main () {
  37.    Point * pointPtr, p ( 3.5, 5.3 ); //点p坐标为3.5, 5.3
  38.    Circle * circlePtr, c ( 2.7, 1.2, 8.9 ); //圆c半径为2.7, 坐标为1.2, 8.9
  39.    cout << "Point p: " << p << "n Circle c: " << c << endl;
  40.    pointPtr = & c; //把派生类Circle对象的地址赋给了基类指针pointPtr
  41.    circlePtr = ( Circle * ) pointPtr; //把基类指针强制转换为派生类指针
  42.    cout << "n Area of c (via circlePtr) : " << circlePtr -> area ( ) << endl;
  43.    pointPtr = & p; //把基类Point对象地址赋给基类指针pointPtr
  44.    circlePtr = ( Circle * ) pointPtr; //把基类指针强制转换为派生类指针
  45.    cout << "n Radius of object circlePtr point to : " << circlePtr -> getRadius ( ) << endl;
  46.    return 0;
  47. }