Một cách hack hình thức hạn chế về tính đa hình trong C là để làm một cái gì đó như thế này:Nửa kế thừa trong C: Đoạn mã này hoạt động như thế nào?
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
Bây giờ bạn có thể tham khảo một trường hợp có nguồn gốc như một trường hợp cơ sở, tùy thuộc vào cách biến là diễn viên, ví dụ:
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);
Vì vậy, câu hỏi của tôi là, tính năng này hoạt động như thế nào? Có phải vì khi bạn cast nó như là cơ sở và tham chiếu một biến, bạn đang tham chiếu đến thành viên int 'x' như là offset từ đầu của cấu trúc 'base'? Đây là điều duy nhất tôi có thể nghĩ đến, bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.
Cảm ơn rất nhiều!
+1 Điều này thực sự được đảm bảo bởi thông số C. – bta