破解 C 中有限形式的多态性的一种方法是执行如下操作:
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
现在您可以将派生实例称为基实例,具体取决于变量的转换方式,即:
derived my_derived;
my_derived.y = 10;
my_derived.super.x = 20;
//will print 10
printf("%d", (&my_derived)->y);
//will print 20
printf("%d", ((base*)(&my_derived) )->x);
所以我的问题是,这究竟是如何工作的?是不是因为当您将其转换为 base 并引用变量时,您将 int 成员“x”引用为距“base”结构开头的偏移量?这是我唯一能想到的,我们将不胜感激。
非常感谢!
最佳答案
在结构中,数据元素之间或结构末尾可以有未命名的填充字节,但开头不能。因此,结构类型对象的第一个数据元素的地址保证与结构类型对象本身的地址相同。
因此,在您的示例中,my_derived
的地址与 my_derived.super
的地址相同。
关于c - C 中的半继承 : How does this snippet work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3322650/