1. 主页
  2. 自己动手从0到1学写FAT32文件系统
  3. 第6章 缓冲区管理
  4. 添加obj类型

添加obj类型

内容纲要

本课时引入了一Obj类型,用于为缓存池的实现做铺垫。

主要内容

实现图简单,略。

重点难点

本课时实际上有点用C的结构体实现了一种简单的面向对像机制 – 继承。用通俗的话来讲,就是子孙继承了上一辈,上上一辈的所有特性。

例如,我们定义了一个结构体,以及相关函数。

typedef struct {int h; ....} A;
void print_a(A * a);
int sum_a(A * a);

借助于类似下图的代码实现,可以实现简单的继承。

typedef struct {A a; int x; ....} B;
void func(B * b);

由于在B的结构体的最开始处,放置了A a。那么对于一个B b; 形式定义的变量。我们可以有如下使用。

B * pb = &b;
.......
((A *)pb)->h = ???;         (1)
print_a((A *)pb);           (2)
sum_a((A *)pb);             (3)
func(pb);                   (4)
pb->x = ???                 (5)

从上面的使用可以看出:

  1. B具有A所有的特性,比如可以使用(1), (2), (3)。换句话说,B拥有A结构体中所有的成员,有关A的所有函数调用,都可用到B上;只不过在使用前需要强制转换;
  2. B具有A不具有的特性,比如可以使用(4), (5)。换句话说,B并不是A。

通俗来讲,A是父亲,B是儿子。

  1. 儿子继承了父亲所有的特性和行为;
  2. 儿子发展出了自己额外的特性和行为。

(当然,实际生活中,父亲的特性和行为并不完全遗传给儿子。)

这就是用C实现继承的机制。

注意事项

课程中并没有完全利用好这种继承机制,后续如果课程课时有扩充,可能会再度利用这一点。

常见问题

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注