纯虚函数简单示例

来源:互联网 发布:sql安装参数错误 编辑:程序博客网 时间:2024/05/21 04:26
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. #define PI 3.1415926  
  5.   
  6. class Shape  
  7. {  
  8. private:  
  9.     double ValuePerSquareUnit;  
  10.   
  11. protected:  
  12.     Shape(double valuePerSquareUnit):  
  13.         ValuePerSquareUnit(valuePerSquareUnit)  
  14.     {  
  15.     }  
  16.   
  17. public:  
  18.     virtual double area() const = 0;  
  19.   
  20.     double value() const  
  21.     {  
  22.         return ValuePerSquareUnit * area();  
  23.     }  
  24.   
  25.     virtual ~Shape()  
  26.     {  
  27.         printf("Shape::~Shape() is called");  
  28.     }  
  29.   
  30.     double getPerSquareUnit()  
  31.     {  
  32.         return ValuePerSquareUnit;  
  33.     }  
  34. };  
  35.   
  36. class Rectangle : public Shape  
  37. {  
  38. private:  
  39.     double Width;  
  40.     double Height;  
  41.   
  42. public:  
  43.     Rectangle(double width, double height, double valuePerSquareUnit):  
  44.         Shape(valuePerSquareUnit),Width(width),Height(height)  
  45.     {  
  46.     }  
  47.   
  48.     virtual ~Rectangle()  
  49.     {  
  50.     }  
  51.   
  52.     virtual double area() const  
  53.     {  
  54.         return Width * Height;  
  55.     }  
  56.   
  57. };  
  58.   
  59. class Circle: public Shape  
  60. {  
  61.     double Radius;  
  62.   
  63. public:  
  64.     Circle(double radius, double valuePerSquareUnit):  
  65.         Shape(valuePerSquareUnit),Radius(radius)  
  66.     {  
  67.     }  
  68.   
  69.     virtual ~Circle()  
  70.     {  
  71.     }  
  72.   
  73.     virtual double area() const  
  74.     {  
  75.         return PI * Radius * Radius;  
  76.     }  
  77. };  
  78.   
  79. int main()  
  80. {  
  81.     Rectangle* pr = new Rectangle(30, 20, 10);  
  82.     Circle* pc = new Circle(15, 10);  
  83.   
  84.     //invoke Rectangle::area()  
  85.     printf("rectangle: area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",   
  86.                 pr->area(), pr->getPerSquareUnit(), pr->value());  
  87.     //invoke Circle::area()  
  88.     printf("circle   : area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",   
  89.                 pc->area(), pc->getPerSquareUnit(), pc->value());  
  90.       
  91.     Shape* shape;  
  92.     shape = pr;  
  93.     printf("rectangle: area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",   
  94.                 shape->area(), shape->getPerSquareUnit(), shape->value());  
  95.   
  96.     shape = pc;  
  97.     printf("circle   : area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",   
  98.                 shape->area(), shape->getPerSquareUnit(), shape->value());  
  99.   
  100.     return 0;  
  101. }  


终端输入: g++ -o PureFunction PureFunction.cpp

./PureFunction


输出:

rectangle: area = 600.00, PerSquareUnit = 10.00, value = 6000.00
circle   : area = 706.86, PerSquareUnit = 10.00, value = 7068.58
rectangle: area = 600.00, PerSquareUnit = 10.00, value = 6000.00
circle   : area = 706.86, PerSquareUnit = 10.00, value = 7068.58

0 0