Невозможно понять контекст в книге Акселя Шрайнера "ООП в Си" - PullRequest
0 голосов
/ 21 января 2019

Я не знаю, подходит ли это здесь, потому что этот вопрос гораздо более конкретный, чем общий.

Я читал эту книгу: ООП в Си - Аксель Шрайнер , но обнаружил, что это трудно понять.

Например, в разделе 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 голосов
/ 21 января 2019

Предположим, что объектами могут быть фрукты, яблоки, бананы или апельсины

Что означает "объект не хранит информацию"?

Вы просто хотите узнать наборобъект (это яблоко), и не нужно хранить другую информацию (где и когда он был произведен, его вес и т. д.).

Что означает «каждый объект принадлежит не более чем одному набору»?

Объект не может быть одновременно яблоком и апельсином

Что означает «Если объект является членом набора, его элемент массива содержит> среднее значение, представляющее набор», означает?

Тогда вы можете просто использовать индекс в массиведля описания объекта.

На самом деле, вы можете просто использовать любой уникальный идентификатор int для описания объекта, и данный код бесполезно сложен для этого.

0 голосов
/ 22 января 2019

Ответ самому себе.

Если объект не хранит информацию и если каждый объект принадлежит не более чем одному набору, мы можем представить каждый объект и каждый набор в виде небольших уникальных положительных целых значений, используемыхв виде индексов в массиве кучи [].

Допустим, целочисленное значение может представлять набор или объект.Например:

0 представляет объект яблока

1 представляет объект банана

2 представляет набор яблока

3 представляет набор банана

В этом случае объект является просто целочисленным значением, поэтому не может хранить никакой информации.

Кроме того, целочисленные значения (0, 1, 2, 3) выше могут использоваться в качестве индексов массива кучи.

Если объект является членом набора, его элемент массива содержит целочисленное значение, представляющее набор.Следовательно, объекты указывают на набор, содержащий их.

В соответствии с приведенным выше примером 0 (объект apple) является членом 2 (set apple).

Следовательно, куча [0] = 2.

Примечание. Куча выводов [0] = 2 сохраняется только при условии, что каждый объект принадлежит максимум одному набору.

0 голосов
/ 21 января 2019

Если я хорошо понимаю:

Что означает "объект не хранит информацию"?

полезен только сам объект, вы можете сравнить его с другими (== или! =), но его значение само по себе не имеет значения

Что означает «каждый объект принадлежит не более чем одному набору»?

Что означает «Если объектявляется членом набора, его элемент массива содержит целочисленное значение, представляющее "среднее значение" *

Когда вы смотрите то, что он предлагает, вы видите new просто поиск в heap для нулевого значения, когда элемент heap равен 0, что означает, что соответствующий объект еще не используется, поэтому он помечает элемент, устанавливающий его, как MANY (любое нулевое значение в порядке вфакт) и вернуть адрес элемента.

Код не управляет случаем, когда нет свободного элемента.

Вы не предоставляете free , ночто, конечно, просто сбросит значение до 0


Все это в любом случае литле странно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...