Идиомы и стили С++
Шрифт:
Вернемся опять к статической функции. Статическую функцию класса можно вызвать двумя способами - указав либо имя класса, либо через экземпляр класса.
Тут-то и делается самый прикол. Мы делаем
Думаю, что на этом следует закончить этот шаг. К конструированию объектов мы будем возвращаться еще не раз… но не сегодня.
Примером производящих функций являются макросы DECLARE_SERIAL, IMPLEMENT_SERIAL, DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE в MFC. Они конечно сложнее и делают много чего еще, но в конечном итоге это замазанные макросом производящие функции.
Шаг 12 - Двухэтапная инициализация.
Когда мы создаем нестековый экземпляр, то пишем такой код:
Попробуем поразбираться. new– это глобальный оператор с определением:
Он получает от компилятора количество байт, необходимое для хранения объекта, а потом передает управление конструктору, чтобы тот правильно произвел нужные инициализации. То есть, в одном выражении исполняется два совершенно разных логических действия:
1. Выделение памяти;
2. Конструирование.
Оба действия могут кончиться неудачей. Либо память не выделится, тогда негде будет инициализировать объект, либо память выделится, но инициализация будет неудачной. С 1998 года стандарт C++ предусматривает, что если инициализация прошла неудачно, то выделенная память должна автоматически освободиться - то есть вызваться оператор delete, но без передачи управления деструктору. До того это оставалось на совести разработчика компилятора, и довольно часто выделенная память могла застрять, и больше не вернуться в систему. Кроме того, конструктор ничего не возвращает. Только что проверить на NULL. Ну еще конечно исключения, да… но все так сложно, елы… Короче, не след бы нам смешивать разные вещи, даже если это совсем не суп и не мухи, а совсем выделение памяти и инициализация.
В какой-то степени по этой причине, но так же и по некоторым другим соображениям,
Особенно часто этим грешат начинающие Delphi– щики, и VB– шники: слишком велик соблазн щелкнуть по методу формы OnCreate, OnShow (Form_Create, Form_Show), и прописывать инициализации там, или, что еще ужаснее, залезть из одной формы в другую и там изменять значения переменных. Не делайте этого! Граждане дельфинщики! Форма - такой же класс, как и все остальные. Не лишайте ее законного конструктора, дайте ей заслуженную инициализацию! Не чмарите свой инструмент, и он воздаст Вам сторицей!
Ну ладно, чувствую я тут возбужденный такой забуду код нарисовать. Сначала пояснения. Пусть Ваш класс управляет Темными Силами, и они лежат в закрытой части объявления. Не ввязывайтесь в борьбу с ними в конструкторе, там они слишком злобно гнетут. Конструктор пусть инициализирует только примитивные типы, он к тому же их оптимизирует ловчее, но фактически его дело - только выделить память и получить указатель на объект. Инициализация Темных Сил - дело специальной функции, которая грамотно выполняет все нужные действия.
Все…
Шаг 13 - Перегрузка operator+.
Оператор operator-› мы уже перегружали. Результаты получились просто феерические. Давайте замучаем еще кого-нибудь и посмотрим, что получится? Давайте. Первейшим кандидатом на переопределение является оператор operator+,потому что в жизни (помимо С++) он выражает замечательное действие - добавление объекта к другому объекту. Конечно, Вы можете придать ему и другой смысл, но это будет как раз тот случай, где "если хочешь быть здоров - ешь один, и в темноте"…
Лучший из худший 3
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
рейтинг книги
Идеальный мир для Лекаря 14
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Неудержимый. Книга XII
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Надуй щеки! Том 6
6. Чеболь за партой
Фантастика:
попаданцы
дорама
рейтинг книги
Черный дембель. Часть 2
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Истинная со скидкой для дракона
Любовные романы:
любовно-фантастические романы
рейтинг книги
В погоне за женой, или Как укротить попаданку
Фантастика:
фэнтези
рейтинг книги
Ванька-ротный
Фантастика:
альтернативная история
рейтинг книги
Новик
2. Помещик
Фантастика:
альтернативная история
рейтинг книги
Адептус Астартес: Омнибус. Том I
Warhammer 40000
Фантастика:
боевая фантастика
рейтинг книги
