KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Владимир Волков - Программирование для карманных компьютеров

Владимир Волков - Программирование для карманных компьютеров

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Владимир Волков, "Программирование для карманных компьютеров" бесплатно, без регистрации.
Перейти на страницу:

(const unsigned short *)szStr

Но С++ не может ограничиваться этими двумя способами приведения типов. В С++ есть еще четыре оператора приведения типа. Прежде всего следует рассмотреть оператор const_cast. Если есть указатель, объявленный с модификатором const, и его нужно передать в качестве аргумента методу, в котором указатель принимается без этого модификатора, то нужно использовать оператор const_cast. Этот оператор удаляет модификатор const из объявления передаваемого указателя. Синтаксис применения этого оператора показан ниже.

const_cast<type>(exp)

В параметре type указывается тип, к которому приводится константа exp. Предположим, что есть некоторая функция, которая принимает в качестве аргумента указатель на int.

void my_func(int *x);

Помимо этого есть константа const int x, значение которой нужно передать в качестве аргумента в эту функцию. Вызов my_func(&x) закончится ошибкой компиляции, поскольку объявленный и передаваемый типы не соответствуют. А с преобразованием const_cast проблем не будет:

my_func(const_cast<int *>(&x));

Оператор dynamic_cast позволяет приводить типы во время выполнения программы. Его синтаксис показан ниже.

dynamic_cast<type*>(exp)

Этот оператор использует для своей работы RTTI (информация о типе во время выполнения программы). Основное назначение этого оператора – обеспечить приведение объектов базового типа к объектам производного типа. Если преобразование осуществлено, то оператор возвращает указатель на производный тип. Если преобразование нельзя провести, то оператор возвращает пустой указатель. Оператор reinterpret_cast позволяет преобразовывать указатели. Его синтаксис приведен ниже.

reinterpret_cast<type>(exp)

Этот оператор позволяет преобразовать указатель на один тип (exp) в указатель на другой тип <type>. Чаще всего его используют для преобразователя нетипизированного указателя void* в указатель на конкретный тип. Оператор static_cast применяется так же, как и явный оператор приведения типов.

Создание проектов MFC

После того как были рассмотрены основные вопросы объектно-ориентированного программирования в eVC, можно перейти к обсуждению создания проектов на основе MFC (Microsoft Foundation Classes).

MFC создавались как стройная иерархия классов, позволяющая в полной мере использовать такое преимущество объектно-ориентированного программирования, как повторное использование кода, инкапсулированного в объекты. Проанализировав основные паттерны программирования в Windows, программисты Microsoft выделили наиболее часто используемые объекты, модели поведения приложений и шаблоны кода, на основе которых они создали свою объектную иерархию. Эта иерархия дала возможность разработчикам сосредоточить свое внимание на реализации логики работы приложения, а не деталей его функционирования. С другой стороны, MFC производит стандартизацию основных операций и стиля программирования. Когда разработчик программирует в MFC, он получает в свое распоряжение большое количество шаблонов и мастеров, но взамен вынужден ограничить свою свободу дополнительными правилами, такими, например, как отказ от множественного наследования внутри иерархии классов MFC.

Структура MFC образует дополнительный программный слой между приложением и Windows API. Конечно, MFC не заставляет разработчика выбирать между использованием WinAPI и MFC, просто для большинства стандартных случаев ему предлагается более логичный и менее трудоемкий путь.

Основные классы MFC

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

Диаграмму, в которой отображены все классы MFC, можно увидеть на сайте Microsoft по адресу http://msdn.microsoft.conn/library/default.asp7urN/library/en-us/vcnnfc98/htnnl/mfcHierarchyChart.asp. Также можно просто открыть сайт msdn.microsoft.com, перейти в раздел Library, набрать в строке поиска MFC, в результатах поиска выбрать тему Microsoft Foundation Class Library и на тематической странице выбрать ссылку Hierarchy chart.

Это действительно впечатляющее зрелище. В классы MFC «завернут» практически весь Windows API. Подавляющее число классов MFC являются наследниками класса CObject, хотя в правой части таблицы можно увидеть отдельный набор классов, не подпадающих под это общее правило.

Надо отметить, что далеко не все классы, отображенные на этой диаграмме входят в состав MFC для Windows CE. В разделе справки Microsoft Foundation Class Library for Windows CE.NET ? Guide to MFC for Windows CE.NET ? Unsupported MFC Classes указаны классы, которые отсутствуют в мобильной версии Windows. Для многих из этих классов в Windows CE определен собственный аналог, а некоторые просто отсутствуют. Раздел справки Differences from Desktop MFC дает полное описание замен и исключений, которые сделаны в мобильной версии MFC.

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*