gpt4 book ai didi

c - 如何在c中实现继承类?

转载 作者:行者123 更新时间:2023-11-30 20:02:55 25 4
gpt4 key购买 nike

我对继承和总体而言是新手,我仍在学习中。但是,如果有人可以帮助我开始将我的 UML 设计转化为下图的代码实现。我将感谢您的帮助。谢谢您的帮助。

另外,我认为我的 UML 设计缺少一些东西。您能检查一下我的 UML 设计是否缺少任何内容吗?

最佳答案

C不支持继承或OOP,因此需要自己实现。有一些有用的技巧很有帮助

结构扩展

C 保证结构体中的第一个字段位于偏移量 0 处,因此您可以在指向结构体的指针和指向结构体第一个字段的指针之间自由转换。这允许轻松扩展结构以进行派生:

struct BaseClass {
...whatever
};

struct DerivedClass {
struct BaseClass base;
... derived class additions
};

在这里,您可以获取一个 DerivedClass 实例(指向)并转换为 BaseClass *,它将起作用。如果已知指针指向实际的 DervicedClass,您还可以将 BaseClass * 强制转换回 DerivedClass *

元类对象

您可以使用包含函数指针的元类结构来实现面向对象调度

struct BaseClass;
struct BaseMetaclass {
void (*method1)(struct BaseClass *);
int (*method2)(struct BaseClass *, int);
};
struct BaseClass {
struct BaseMetaclass *isa;
....
};

现在您可以创建一个供所有 BaseClass 实例使用的 BaseMetaclass 实例,并通过 isa 指针调用该方法。

  base_obj->isa->method1(base_obj);

如果派生类不需要添加任何新方法,则可以直接使用 BaseMetaclass,或者可以使用带有附加字段的结构扩展来定义 DerivedMetaclass。您还可以将任何其他您喜欢的面向类的数据放入元数据对象中(带有类名称的字符串常量很有用)。

关于c - 如何在c中实现继承类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58211102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com