- #include <stdio.h>
- #include <stdlib.h>
- #define PI 3.1415926
- class Shape
- {
- private:
- double ValuePerSquareUnit;
- protected:
- Shape(double valuePerSquareUnit):
- ValuePerSquareUnit(valuePerSquareUnit)
- {
- }
- public:
- virtual double area() const = 0;
- double value() const
- {
- return ValuePerSquareUnit * area();
- }
- virtual ~Shape()
- {
- printf("Shape::~Shape() is called");
- }
- double getPerSquareUnit()
- {
- return ValuePerSquareUnit;
- }
- };
- class Rectangle : public Shape
- {
- private:
- double Width;
- double Height;
- public:
- Rectangle(double width, double height, double valuePerSquareUnit):
- Shape(valuePerSquareUnit),Width(width),Height(height)
- {
- }
- virtual ~Rectangle()
- {
- }
- virtual double area() const
- {
- return Width * Height;
- }
- };
- class Circle: public Shape
- {
- double Radius;
- public:
- Circle(double radius, double valuePerSquareUnit):
- Shape(valuePerSquareUnit),Radius(radius)
- {
- }
- virtual ~Circle()
- {
- }
- virtual double area() const
- {
- return PI * Radius * Radius;
- }
- };
- int main()
- {
- Rectangle* pr = new Rectangle(30, 20, 10);
- Circle* pc = new Circle(15, 10);
- //invoke Rectangle::area()
- printf("rectangle: area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",
- pr->area(), pr->getPerSquareUnit(), pr->value());
- //invoke Circle::area()
- printf("circle : area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",
- pc->area(), pc->getPerSquareUnit(), pc->value());
- Shape* shape;
- shape = pr;
- printf("rectangle: area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",
- shape->area(), shape->getPerSquareUnit(), shape->value());
- shape = pc;
- printf("circle : area = %.2f, PerSquareUnit = %.2f, value = %.2f\n",
- shape->area(), shape->getPerSquareUnit(), shape->value());
- return 0;
- }
终端输入: 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