#include #include "square.h" struct square { struct shape *shape; double width; }; /* Shape interface */ double shape_area_impl(struct shape *shape) { struct square *square = (struct square *)shape; return square_area(square); } void shape_destroy_impl(struct shape *shape) { struct square *square = (struct square *)shape; square_destroy(square); } struct shape *square_as_shape(struct square *square) { return square->shape; } /* End of shape interface */ struct square *square_create(double width) { struct square *square = malloc(sizeof(struct square)); square->width = width; square->shape = shape_create(square, shape_area_impl, shape_destroy_impl); return square; } double square_area(struct square *square) { return square->width * square->width; } void square_destroy(struct square *square) { free(square); }