- #ifndef SHAPE_H_INCLUDED
- #define SHAPE_H_INCLUDED
- class Shape
- {
- public:
- virtual double area() = 0;
- };
- class Circle:public Shape
- {
- public:
- Circle(double r = 0):radius(r){}
- double area();
- private:
- constexpr static double PI = 3.1415926;
- double radius;
- };
- class Rectangle:public Shape
- {
- public:
- Rectangle(double h = 0,double w = 0):height(h),width(w){}
- double area();
- private:
- double height;
- double width;
- };
- class Triangle:public Shape
- {
- public:
- Triangle(double bM = 0, double h = 0):bottomMargin(bM),height(h){}
- double area();
- private:
- double bottomMargin;
- double height;
- };
- #endif // SHAPE_H_INCLUDED
- #include "Shape.h"
- double Circle::area()
- {
- return radius * radius * PI;
- }
- double Rectangle::area()
- {
- return height * width;
- }
- double Triangle::area()
- {
- return (height * bottomMargin)/2;
- }
main.cpp
- #include <iostream>
- #include "Shape.h"
- using namespace std;
- int main()
- {
- Circle c1(12.6),c2(4.9);
- Rectangle r1(4.5,8.4),r2(5.0,2.5);
- Triangle t1(4.5,8.4),t2(3.4,2.8);
- Shape* pt[6] = {&c1,&c2,&r1,&r2,&t1,&t2};
- double areas = 0.0;
- for(int i = 0; i < 6; ++i)
- areas += pt[i]->area();
- cout << "total of all areas =" << areas << endl;
- return 0;
- }