这里说的继承有点像C 里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧。 父结构体和子结构体能够强行转换的条件是:子结构体的第一个成员必须是父结构体 下面给出一个Demo,很简单,分别定义了一个father结构体和一个son结构体,father结构体里定义了2个整形变量,son结构体里的第一个成员是father结构体类型的变量,son里的另外2个成员也是整形变量,这样,son结构体就好像继承了father结构体,并增加了2个成员,代码如下: #include<stdio.h> #include<stdlib.h> //父结构体 struct father { int f1; int f2; }; //子结构体 struct son { struct father fn; int s1; int s2; }; void test(struct son *s) { struct father *f = (struct father *)s; printf('f1 = %d, f2 = %d\n', f->f1, f->f2); //修改的还是子结构体的成员,因为传递的是子结构体的值。 f->f1 = 10; f->f2 = 20; } int main(void) { struct son so; so.fn.f1 = 1; so.fn.f2 = 2; struct father fa; fa.f1 = 3; fa.f2 = 4; test(&so); printf('son f1 = %d, son f2 = %d\n', so.fn.f1, so.fn.f2); printf('father f1 = %d, father f2 = %d\n', fa.f1, fa.f2); //printf('I want to print:1,2,10,20,3,4\n'); return 0; } 执行程序得: f1 = 1, f2 = 2 son f1 = 10, son f2 = 20 father f1 = 3, father f2 = 4 头条号第一篇文章,大家给提提意见吧~ (* ̄︶ ̄) |
|
来自: 山峰云绕 > 《c加加c井号面向对象》