class CArray {

public:

 CNode* cells;

 CArray(): cells(NULL) {}

 CCursor operator[](int i);

};

CCursor CArray::operator[](int _index) {

 CNode* pNode = cells;

 while (pNode!=NULL) {

  if (pNode-›index -_index) {

   return CCursor(this, pNode);

  } else pNode=pNode-›next;

 }

 return CCursor(this, _index);

}

CCursor& CCursor::operator=(CThat* _that) {

 if (node==NULL) {

  node = new CNode (index, _that, array-›cells);

  array-›cells = node;

 } else {

  node-›that = _that;

 }

 return *this;

}

CCursor::operator CThat*() {

 return node != NULL ? node-›that : NULL;

};

CThat* CCursor::operator-›() {

 if (node == NULL) { throw 1; }

 return node-›that;

}

Шаг 17 - Как НЕ создавать локальные переменные.

Что он сделал? Я не постигаю. Что нибудь особенное есть в этих словах: 'Буря мглою…'? ___ Повезло ___ стрелял в него этот белогвардеец ___ и тем обеспечил бессмертие.

М. Булгаков. Мастер и Маргарита.

Лирическое отступление номер 2. Нажмите PageDown, если Вам неинтересно.

2001, апрель, 15.

Спасибо всем, написавшим отклики. Постараюсь проработать еще 3-4 больших темы и возможно бОльшую пачку маленьких идиом и приемов.

Увы, есть ограничивающие факторы: в первую очередь, это - просто тяжелый труд, а иных стимулов, кроме гордыни и тщеславия, нет. Второй фактор - текущее место работы, я подумываю его сменить. Понимаете, напрягают одноэсить, 1C в смысле, и если заставят, то шагам конец, да и деньги опять же; а я человек увлекающийся, и тем, чем занимаюсь, живу в полном смысле. Я вообще за шаги взялся потому, что решил продвинуть статус MCP до MCSD, стал учебники листать-повторять да и увлекся…

Как следствие: Если Вас заинтересовали мои шаги, и у Вас есть свободные вакансии программиста (и интересная, лучше трудная работа), прошу Вас и Ваш HR department (отдел кадров) рассматривать данные шаги как мое резюме.

Да-да, а что Вы хотите - естественно, это реклама…

Так, все, далее - заготовленный текст шага.

Иной раз найдешь какую-нибудь красивую фенечку, поразишься гению человека, ее придумавшего… и остается только жалеть, что не ТЫ это придумал, а ведь мог же, ну что тут такого! С другой стороны, широкое использование идей других людей и есть тот феномен, который позволил так быстро развиться компьютерной индустрии, и в конечном счете дающий нам работу. (Имею в виду конечно покупку Биллом Гейтсом операционки DOS в прошлом тысячелетии).

Ну ладно, будет. Перейдем к делу.

Допустим у Вас есть блажь - запретить конструирование объектов в стеке. Или другими словами - запретить создание локальных переменных. Зачем? Да как зачем - хочется и все… Ну хотя бы затем, чтобы они не удалялись при выходе за скобки. Или опять же, Вы создаете сообщения и толкаете их в очередь на обработку. Или Вы написали свой менеджер памяти (неплохое занятие кстати, позже будем разбирать управление памятью, увидите, сколь сие плодотворно). Вообще, стек и куча (stack и heap) вещи разные, у них разная скорость и вообще много разного. Смешивать никак нельзя. Ясно, для Вас это сейчас не проблема. Даже если не знали раньше, прочитали в шагах:

1. Определяем ВСЕ необходимые конструкторы.

2. ВСЕ конструкторы кладем в private или protected.

3. Рисуем производящую функцю.

Как писал Зощенко, 'стою, любуюсь крепкой тарой'.

Есть еще один способ. Вы будете смеяться. Или плакать. Придёте в возбуждение. Так что зажгите сигарету загодя и хорошенько затянитесь.

1. Защищаем… деструктор!

2. Рисуем разрушающую функцию.

Vous savez, деструктор только один, да к тому же виртуальный. Эх, жалко нет метакласса… да и зачем нам метакласс, я же читать не умею (авторская разрядка здесь)!

Нужно только помнить, что разрушение объекта через delete и через явный вызов деструктора есть не одно и то же. Об этом позже, когда будем ковырять память.(Автор после разрядки мгновенно засыпает.)

Шаг 18 - Управление памятью.

Больше нет возможности обходить эту тему. Это слишком важно. Долго не хотел браться за нее, но она сама взялась за меня.В управлении памятью одна из самых больших проблем (для меня) состоит в том,что у авторов книг по C++ в этом месте случается как бы легкий интеллектуальный сдвиг… И их объяснения становятся похожи на прения на слете экстрасенсов, чародеев и магов. Или как если бы кто взялся объяснять герундий английского языка мне (Альберту Махмутову) по китайски.

В общем, даже простые вопросы оказываются настолько…, что понять их невозможно. Так что я

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату