//C语言实现面向对象,细节暂不做修改,简单易懂 #include <stdio.h> #include <stdlib.h> #define PI (3.14) typedef struct shape { //shape基类 int x; int y; } shape_t; typedef struct Rectangle { //矩形类 const struct Rectangle* this; shape_t point; int (*GetArea)(const struct Rectangle*); } rect_t; typedef struct Circle { //圆形类 const struct Circle* this; shape_t point; double (*GetArea)(const struct Circle*); } circ_t; typedef struct Square { //正方形类 const struct Square* this; rect_t rect; int (*GetArea)(const struct Square*); } squa_t; int getRectArea(const struct Rectangle* this) { return this->point.x * this->point.y; } double getCircArea(const struct Circle* this) { return PI * this->point.x * this->point.x; } int getSquaArea(const struct Square* this) { return this->rect.point.x * this->rect.point.x; } int main() { rect_t rect = { .this = &rect, .GetArea = getRectArea }; scanf("%d %d", &rect.point.x, &rect.point.y); circ_t circ = { .this = &circ, .point.y = 0, .GetArea = getCircArea }; scanf("%d", &circ.point.x); squa_t squa = { .this = &squa, .rect.point.y = 0, .GetArea = getSquaArea }; scanf("%d", &squa.rect.point.x); int rectArea = rect.GetArea(&rect); double circArea = circ.GetArea(&circ); int squaArea = squa.GetArea(&squa); printf("%d\n", rectArea); printf("%g\n", circArea); printf("%d\n", squaArea); return 0; }