无法理解Axel Schreiner撰写的“ C中的OOP”一书中的上下文

时间:2019-01-21 11:42:04

标签: c oop

我不知道这是否适合在这里提出问题,因为这个问题更具体而不是一般。

我一直在读这本书:OOP in C - 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;
}

我不能将这两个连接在一起。

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

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

“如果对象是集合的成员,则其数组元素包含表示集合的整数值”是什么意思?

我读得很辛苦,但仍然听不懂。 谢谢。

3 个答案:

答案 0 :(得分:2)

如果我很了解:

  

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

仅对象本身是有用的,您可以将其与其他对象(==或!=)进行比较,但其值本身并不重要

  

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

     

“如果对象是集合的成员,则其数组元素包含表示集合的整数值”是什么意思?

当您查看他的建议时,您会看到 new 只需在 heap 中搜索一个空值,而当 heap 的元素为0时,表示尚未使用相应的对象,因此他用MANY(实际上可以使用任何null值)标记设置该元素的元素,并返回该元素的地址。

在没有可用元素的情况下,代码无法处理情况。

您没有给免费,但是肯定会重置为0


所有这些都有点奇怪

答案 1 :(得分:2)

假设对象可以是水果,苹果,香蕉或橙子

  

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

您只想知道对象的集合(它是一个苹果),而无需存储其他信息(该对象的生产时间和地点,其范围等)。

  

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

一个对象不能同时是苹果和橙子

  

“如果对象是集合的成员,则其数组元素包含>表示集合的整数值”是什么意思?

然后,您可以在数组中使用索引来描述对象。

实际上,您可以使用任何唯一的int标识符来描述对象,并​​且给定的代码这样做毫无用处。

答案 2 :(得分:0)

回应我自己。

  

如果一个对象不存储任何信息,并且每个对象都属于   最多一组,我们可以将每个对象和每个组表示为小,   唯一的正整数值,用作数组堆[]的索引。

让我们说一个整数值可以表示一个集合或一个对象。例如:

0代表一个苹果对象

1代表香蕉对象

2代表一个苹果集

3代表香蕉组

在这种情况下,object只是一个整数值,因此无法存储任何信息。

此外,上面的整数值(0、1、2、3)可用作堆数组的索引。

  

如果对象是集合的成员,则其数组元素包含   表示集合的整数值。因此,对象指向   设置包含它们。

在上面的示例中,0(对象苹果)是2(set苹果)的成员。

因此,堆[0] = 2。

注意:结论堆[0] = 2仅在每个对象最多属于一个集合的条件下保存。