灬榛果摩卡灬 2024-10-29 16:46 采纳率: 66.7%
浏览 8

C语言面向对象多态问题

大家好,我最近在学习C语言面向对象的多态,请问下面这个代码里面c->base.display = (void (*)(void))circle_display;有链接成功吗,这个结果我在devC++里面并不能正常输出结果,困惑了很久,不知道怎么才能正常跑下去,看的原文章在这里,是里面的多态https://blog.csdn.net/mx_jun/article/details/138533562?ops_request_misc=&request_id=&biz_id=102&utm_term=C%E8%AF%AD%E8%A8%80%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-138533562.142^v100^pc_search_result_base1&spm=1018.2226.3001.4187

#include <stdio.h>  
  
// 定义一个“接口”结构体,包含函数指针  
typedef struct {  
    void (*display)(void);  
} Shape;  
  
// 圆形结构体,包含接口函数指针的实现  
typedef struct {  
    Shape base; // 继承自Shape接口  
    double radius;  
} Circle;  
  
// 矩形结构体,包含接口函数指针的实现  
typedef struct {  
    Shape base; // 继承自Shape接口  
    double width;  
    double height;  
} Rectangle;  
  
// 圆形display方法的实现  
void circle_display(Circle *c) {  
    printf("Circle with radius %.2f\n", c->radius);  
}  
  
// 矩形display方法的实现  
void rectangle_display(Rectangle *r) {  
    printf("Rectangle with width %.2f and height %.2f\n", r->width, r->height);  
}  
  
// 一个函数,接受Shape接口指针并调用其display方法  
void display_shape(Shape *shape) {  
    shape->display(); // 注意这里并没有直接的类型检查,是静态分派的  
}  
  
// 初始化圆形并设置接口方法  
void init_circle(Circle *c, double radius) {  
    c->radius = radius;  
    c->base.display = (void (*)(void))circle_display; // 强制类型转换,因为C没有类型安全的函数指针  
}  
  
// 初始化矩形并设置接口方法  
void init_rectangle(Rectangle *r, double width, double height) {  
    r->width = width;  
    r->height = height;  
    r->base.display = (void (*)(void))rectangle_display; // 同样需要强制类型转换  
}  
  
int main() {  
    // 创建圆形和矩形对象,并初始化它们  
    Circle circle;  
    Rectangle rectangle;  
    init_circle(&circle, 5.0);  
    init_rectangle(&rectangle, 4.0, 6.0);  
  
    // 将它们作为Shape接口进行显示  
    display_shape((Shape *)&circle);    // 输出:Circle with radius 5.00  
    display_shape((Shape *)&rectangle); // 输出:Rectangle with width 4.00 and height 6.00  
  
    return 0;  
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2024-10-29 20:24
    关注

    你看的文章是ai生成的,根本都是瞎说8道,你的代码也是ai生成的。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月29日