Сразу развею все сомнения и скажу честно: я не буду писать для вас программы. Если я сделаю это, что же делать вам? Язык С++, его подмножество, использован мной почти как язык объектной модели, вернее он и пространство сообщений дополняют друг друга. У такого способа огромное количество недостатков, но есть и преимущества:
Легкие изменения в стиле оформления: имена и действия по умолчанию, отступы т прочие, казалось бы мелкие детали, делают текст программы вполне нечитабельным, и без головной боли, вам не удастся понять о чем идет речь. Причем обилие комментариев не всегда может помочь, если вы слабо знаете язык комментария или он составлен с вашей точки зрения плохо. Это напоминает то, как если бы к вам пришел человек, который выучил ваш язык но с другими ударениями, паузами и интонациями: устная речь будет совершенно не понятной. Но к сожалению не существует стандартных жестких правил по оформлению программы предназначенной для переноса в исходнике.
В таблице (Таблица 1) указаны сокращения, которые применяются в примерах.
Наличие _p суффикса в именах пришло от того, что в ряде моделей памяти есть far и near указатели, смешивание которых нежелательно, а явное задание типа указателя довольно утомительно. Этот _p скрывает за собой это, что облегчает перенос программы из flat модели в другую.
Я не люблю ИменаВСтилеПаскаля, и редко их использую.
Таблица 1
Сокращения в примерах программ
u_< type > | unsigned < type > |
< type >_p | < type > * |
t_< name > | Тип структуры С |
T< name > | Тип структуры С++ |
В примерах я использую стандартные библиотеки и ряд своих определений. Все мои заголовки и библиотеки лежат в каталоге MYLIB. Каждая группа определений общего назначения находятся в каталоге PRJ\<имя группы >. После успешного создания .h и .lib файлов этих моих определений, те, которые необходимы, копируются в каталог MYLIB.
Я опишу назначение компонент для самого большого примера VM (просмотр файлов с запоминанием последнего состояния), из раздела ╚Объектная модель╩. Другие примеры используют те же определения. Пример создавался под консольный вариант WIN32 в BC45.
Я хотел иметь последовательность разработки примера ╚с нуля╩, но по техническим причинам это сохранить не удалось. Есть только один из последних вариантов, который хотя и не реализует даже 50% от намеченного, но, я думаю, свою задачу примера ООП программы выполняет. Вот краткий перечень заголовков, библиотек, функций и классов. Чтобы узнать их лучше, надо просмотреть сами файлы.
conio.h
Нет ничего хуже, чем копаться в чужих исходниках, но я не вижу другой возможности посмотреть на примеры, кроме этой. Конечно, примеры серьезно не проверялись, и, фактически, являются черновым вариантом, содержат достаточно много ошибок, но VM - нитка, позволяющая выполнить ряд основных частных случаев задачи. Это позволяет надеяться, что какие либо изменения над кодом будут проводиться локально, что позволит хорошо видеть преимущества объектной модели.
В примере используются как вложение, так и наследование, множественное наследование, шаблоны кода. К сожалению, мне не удалось создать простой класс преобразования в поток, что усложняет разбирательство с кодом, комментарии к некоторым методам, по техническим причинам, так же не отражают реального назначения точно, это придется установить просмотрев линию наследования.
Лучше, конечно, в качестве примера брать исходники, разработанные профессионалами, специально для обучения, если они есть. Именно отсутствие их и побудило меня написать это. Я просто собрал в одну кучу те проблемы, с решением которых мне приходилось сталкиваться, и изложил их в том порядке, какой считаю правильным и легким. Надеюсь, что это кому-нибудь поможет когда-нибудь при борьбе с подобными.