首页 > 解决方案 > 无法理解 Axel Schreiner 的“C 中的 OOP”一书中的上下文

问题描述

我不知道这是否适合在这里问,因为这个问题更具体而不是笼统。

我一直在阅读这本书:C 中的 OOP - Axel Schreiner,但发现它很难理解。

例如,在第 1.7 节:一个实现——集合

如果一个对象不存储信息,并且每个对象最多属于一个集合,我们可以将每个对象和每个集合表示为小的、唯一的、正整数值,用作数组 heap[] 的索引。如果对象是集合的成员,则其数组元素包含表示该集合的整数值。因此,对象指向包含它们的集合。

#if ! defined MANY || MANY < 1
#define MANY 10
#endif
static int heap [MANY];
void * new (const void * type, ...)
{    int * p; /* & heap[1..] */
     for (p = heap + 1; p < heap + MANY; ++ p)
         if (! * p)
             break;
     assert(p < heap + MANY);
     * p = MANY;
     return p;
}

我无法将这两者联系在一起。

“对象不存储信息”是什么意思?

“每个对象最多属于一个集合”是什么意思?

“如果一个对象是一个集合的成员,它的数组元素包含代表这个集合的整数值”是什么意思?

我读得很辛苦,但仍然无法理解。谢谢。

标签: coop

解决方案


如果我很好理解:

“对象不存储信息”是什么意思?

只有对象本身有用,您可以将其与其他对象进行比较(== 或!=),但其本身的价值无关紧要

“每个对象最多属于一个集合”是什么意思?

“如果一个对象是一个集合的成员,它的数组元素包含代表这个集合的整数值”是什么意思?

当您查看他的建议时,您会看到new只是在堆中搜索空值,当的元素为 0 时,这意味着尚未使用相应的对象,因此他将设置它的元素标记为 MANY(任何空值都可以实际上)并返回元素的地址。

当没有空闲元素时,代码不会管理这种情况。

您没有免费提供,但那肯定会将值重置为 0


反正这一切都有点奇怪


推荐阅读