我们可以在C中实现继承吗?

时间:2013-12-20 07:51:23

标签: c inheritance

我已经看到我们可以在ANSI C中实现多重继承? 因为我们可以创建像

这样的类
struct sampleClass {
    int size;
    struct sampleClass *ptr1;
};

我试图创建类并希望实现继承。你能告诉我如何实现它吗?

2 个答案:

答案 0 :(得分:3)

这取决于“在C中实施inheritance”的含义。

确实已经完成了宏,编码指南和样式,以及struct函数指针(模仿virtual method table)和其他metadata。一个很好的例子来自GTK及其GObject图层。

答案 1 :(得分:1)

我以前见过这件事。

#include "stdio.h"

#define FRUIT_COLOR_RED   1

struct fruit {
    char* name;
};

struct apple {
    struct fruit base;
    int color;
};

void printFruit(struct fruit *f) {
    printf(f->name);
}

int main(int argc, char** argv) {
    struct apple a;
    a.base.name = "apple";
    a.color = FRUIT_COLOR_RED;

    printFruit((struct fruit*)&a);

    return 0;
}

这是有效的,因为struct fruit是struct apple的第一个成员,两个结构在内存中对齐。

| - 4或8个字节(char *) - | =>在记忆中结构果实

| - 4或8个字节(char *) - | - 4或8个字节(int) - | =>结构苹果在记忆中

前4个或8个字节(分别取决于32位与64位)的长度和类型相同,因此您可以将struct apple *转换为struct fruit *,因为它们在内存中排列,它会读取成员结构水果。

我不知道这是不是很好的做法,我会避免它。我喜欢C的简单性,但为什么不使用具有这些构造的语言,比如C ++。

在C中实现面向对象功能意味着更多代码行和更多维护。

此外,如果代码没有构建,我现在在记事本中写了它,但概念就在那里。目前我没有C编译器: - (。