我现在需要在 C 中获得一些面向对象的特性,特别是继承。幸运的是,有一些关于堆栈溢出的很好的参考资料,特别是C 中的半继承:这个片段如何工作?和 C 中的这个面向对象。这个想法是在派生类中包含一个基类的实例并对其进行类型转换,如下所示:
struct base {
int x;
int y;
};
struct derived {
struct base super;
int z;
};
struct derived d;
d.super.x = 1;
d.super.y = 2;
d.z = 3;
struct base b = (struct base *)&d;
这很好,但是对于深度继承树来说它变得很麻烦——我将拥有大约 5-6 个“类”的链,我真的不想一直输入 derived.super.super.super.super.super.super . 我希望我可以将类型转换为前 n 个元素的结构,如下所示:
struct base {
int x;
int y;
};
struct derived {
int x;
int y;
int z;
};
struct derived d;
d.x = 1;
d.y = 2;
d.z = 3;
struct base b = (struct base *)&d;
我已经在 Visual Studio 2012 附带的 C 编译器上对此进行了测试,它可以工作,但我不知道 C 标准是否真的保证它。有没有人可以确定这是否可以?我不想编写大量代码只是为了发现它在如此基本的层面上被破坏了。