我已经看到我们可以在ANSI C中实现多重继承? 因为我们可以创建像
这样的类struct sampleClass {
int size;
struct sampleClass *ptr1;
};
我试图创建类并希望实现继承。你能告诉我如何实现它吗?
答案 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编译器: - (。