    01: #include <iostream>
    02:
    03: using namespace std;
    04:
    05: /**
    06:    A class that describes triangle shapes like this:
    07:    []
    08:    [][]
    09:    [][][]
    10:    . . .
    11: */
    12: class Triangle
    13: {
    14: public:
    15:    Triangle(int w);
    16:    int get_area() const;
    17: private:
    18:    int width;
    19: };
    20:
    21: /**
    22:    Constructs a triangle with a given width.
    23:    @param w the width of the triangle base
    24: */
    25: Triangle::Triangle(int w)
    26: {
    27:    width = w;
    28: }
    29:
    30: /**
    31:    Computes the area of the triangle shape.
    32:    @return the area
    33: */
    34: int Triangle::get_area() const
    35: {
    36:    if (width == 1) return 1;
    37:    Triangle smaller_triangle(width - 1);
    38:    int smaller_area = smaller_triangle.get_area();
    39:    return smaller_area + width;
    40: }
    41:
    42: int main()
    43: {
    44:    Triangle t(4);
    45:    cout << "Area: " << t.get_area() << endl;
    46:    return 0;
    47: }
    48: