声明:本文为原创
#####请转贴时保留以下内容######
作者:GTT
请提出宝贵意见Mail:mtloveft@hotmail.com
提示:本文是介绍C是如何实现OO的多层继承!
之前写了一篇关于C与OO的文章,
这是对这篇文章的补充。
高级语言的多层继承如下图
也就是男学生要继承于男人,男人又继承于人,数据的构成如下
如果用C怎么实现呢?其实是很简单的。定义代码如下
struct Person { char* name; int sex; }
struct Man { strcut Person p; char* beard; }
struct Student { struct Man m; int id; }
|
操作代码如下
Person *p; Man *m; Student *s; p = kzalloc(sizeof(struct Student), GFP_KERNEL); m = (Man *) p; s = (Student *) p;
p = (Person *) m; p = (Person *) s;
m = (Man *) s; s = (Student *) m;
|
当然给p分配内存大小就必须使Student的大小了,这样就不用考虑内存越界的问题了。
其实高级语言也是这么实现的。你看看构造方法里是不是第一条语句就是构造基类。其它语句是编译不过去的。
这种多层继承在Linux内核程序里很多地方都有,例如socket的实现。
看看图,如下
结构够复杂的了吧,没办法,要利用高级语言的特性,只能这么用了。
这样udp_sock, inet_sock inet, sock sk之间就可以互相转换了。而不用考虑越界的问题了。
当然最开始的内存分配也应该如下
Sock * sk = kzalloc(sizeof(struct udp_sock), GFP_KERNEL);
|
这样才能保证数据的正确性。
阅读(494) | 评论(0) | 转发(0) |