Albert Makhmutov - Идиомы и стили С++

Тут можно читать онлайн Albert Makhmutov - Идиомы и стили С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
Albert Makhmutov - Идиомы и стили С++
  • Название:
    Идиомы и стили С++
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.56/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Albert Makhmutov - Идиомы и стили С++ краткое содержание

Идиомы и стили С++ - описание и краткое содержание, автор Albert Makhmutov, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Идиомы и стили С++ - читать онлайн бесплатно полную версию (весь текст целиком)

Идиомы и стили С++ - читать книгу онлайн бесплатно, автор Albert Makhmutov
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Еще по коду: Я написал для примера код, имитирующий базу данных наподобие SQL, потом засунул базу в класс такого массива и все такое… но получилось около 300 строк, и наглядность совсем пропала. Так что беру попроще - связанный список.

class CThat {int a;};

class CCursor;

class CArray;

class CNode;

class CNode {

public:

int index;

CThat* that;

CNode* next;

CNode (int _index, CThat* _that, CNode* _next): index(_index), that(_that), next(_next) {}

};

class CCursor {

public:

CArray* array;

int index;

CNode* node;

CCursor(CArray* _array, int _index):

array(_array), index(_index), node (NULL){};

CCursor(CArray* _array, CNode* _node):

array(_array), index (_node-›index), node (_node){};

CCursor& operator=(CThat* _that);

operator CThat*();

CThat* operator-›();

};

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++в этом месте случается как бы легкий интеллектуальный сдвиг… И их объяснения становятся похожи на прения на слете экстрасенсов, чародеев и магов. Или как если бы кто взялся объяснять герундий английского языка мне (Альберту Махмутову) по китайски.

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

Вспомните Шаг 12. Что делается, когда компилятор видит ключевое слово new? Сначала выделяется память, и компилятор получает указатель на нее, потом вызывается конструктор; ясно, что где-то в глубине кода конструктор получает указатель на свежую, сырую память, исполняет себя, а потом возвращает указатель обратно клиенту. Как выделяется сырая память? На то есть оператор operator new.

Вот его прототип:

void* operator new(size_t);

Ничего сложного. Несколько необычно получает параметр, правда, но это только на первый взгляд, на то он и оператор. Параметр - это размер объекта; похоже на то, как если бы мы написали (но неверно разумеется):

CClass* cc = operator new(sizeof(CClass));

Зато мы можем перегрузить operator new(что не удивительно), да к тому же добавить параметров (что уже лучше). Главное, чтобы первый параметр был все равно size_t- размер объекта, а то из спецификаци языка вылетим. Обратите внимание - перегружается оператор operator new(), а не ключевое слово new, оно же элемент синтаксиса, можно сказать. Прототип перегрузки и пример использования:

void* operator new(size_t, int);

// V

// --‹-‹-‹---

// ¦

// V

CClass* cc = new(234) CClass;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Albert Makhmutov читать все книги автора по порядку

Albert Makhmutov - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Идиомы и стили С++ отзывы


Отзывы читателей о книге Идиомы и стили С++, автор: Albert Makhmutov. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x