
- •1. Признаки сложных систем. Сложность, присущая программному обеспечению.
- •2. Компоненты объектно-ориентированного подхода.
- •3. Объекты и классы с точки зрения объектно-ориентированного проектирования.
- •4. Модели и диаграммы, используемые в объектно-ориентированном подходе.
- •5. Техника отладки.
- •6. Работа с многофайловыми проектами. Использование включаемых файлов.
- •9. Простое наследование. Контроль доступа к атрибутам класса.
- •10. Виртуальные функции (вф) и абстрактные классы.
- •11. Множественное и виртуальное наследование.Множественное наследование
- •12 Перегрузка операций
- •13. Шаблоны функций, макросы, inline-функции.
- •14. Шаблоны классов.
- •15. Обработка исключительных ситуаций, структурная обработка исключений.
- •16. Пространства имён. Кратко о механизме пространства имен
- •Зачем нужен механизм пространства имен?
- •Имитация средствами языка Си
- •Правило составления имени
- •Недостатки
- •17 Строки и потоки.
- •18.Стандартная библиотека: Контейнеры
- •19 Реализация устойчивости объектов средствами mfc.
- •20. Структура Windows-приложения WinApi
- •21. Структура Windows-приложения, использующего библиотеку mfc
- •Документы и их представление
- •22. Обработка сообщений
- •23. Контекст устройства
- •24.Объекты gdi
- •25.Использование контекста отображения в памяти.
- •26.Режимы отображения.
- •27.Работа с меню. Обработка сообщений.
- •28.Работа с диалогами. Обработка сообщений.
- •29. Работа с полями ввода и кнопками.
- •30. Работа со списками и выпадающими списками. Работа со списком
- •Работа с комбинированном списком
- •Инициализация
- •Операции со строками
- •31. Классы CimageList и CtreeCtrl. Класс cImageList
- •Изменение содержимого списка
- •32. Классы CimageList и ClistCtrl. Класс cImageList
- •Изменение содержимого списка
- •Создание просмотра списка
- •Работа со столбцами
- •Функции для работы со списком в целом
- •Рабочие области просмотра списка
- •Поиск и сортировка записей
- •33. Классы CprogressCtrl, cRichEdit Ctrl, CsliderCtrl, cSpinButton Ctrl.
- •34. Классы cPropertySheet и cPropertyPage.
- •35. Передача информации в диалог и обратно.
- •36. Работа со стандартными диалогами.
- •37.Обработка сообщений от клавиатуры и мыши(wm_char,wm_keYxxx,wm_xButtoNxxx,
- •38 Таймеры, использование времени простоя программы и локального цикла обработки сообщений.
- •39. Библиотеки динамической компоновки. Явная и неявная загрузка dll.
- •Согласование экспортируемых элементов с импортируемыми
Правило составления имени
Имя функции/переменной, содержащее в себе признак пространства имен, должно строиться по жесткой иерархической схеме, аналогичной схеме построения предложений в английском языке.
Для имен переменных эта схема будет выглядеть так:
Имя-модуля — имя-переменной
Т.е. всегда первым членом составного имени переменной идет идентификатор (название) модуля, затем собственно имя переменной (существительное либо существительное+прилагательное).
Например, в модулях, которые реализуют обмен по некоторым интерфейсам, могут быть переменные:
uart_buffer_rx
uart_buffer_tx
uart_counter
spi_buffer_rx
spi_buffer_tx
spi_counter
Для имен функций эту схему можно выразить в терминах правил грамматики:
Подлежащее — сказуемое — дополнение
Либо эту схему можно выразить в виде иерархической взаимосвязи:
Субъект — действие — объект
Т.е. первым членом составного имени функции должен идти идентификатор (название) модуля, которому оно принадлежит. Вторым членом должен идти глагол, определяющий действие, производимое в функции. После глагола может следовать уточняющее глагол дополнение, которое помогает различать похожие функции.
Например, в модуле, который реализует работу с флэш-памятью, могут быть различные методы для записи и стирания содержимого памяти:
flash_write_byte
flash_write_float
flash_erase_full
flash_erase_sector
Недостатки
У описанного метода есть и свои недостатки. Поскольку это всего лишь имитация, то этот метод работает в рамках модели языка Си, в котором не существует метода для ручного дробления глобального пространства имен программы. Поэтому в отличие от нативного механизма пространств имен (реализованного в других языках), для доступа к переменным внутри модуля приходится использовать те же самые глобальные длинные имена.
17 Строки и потоки.
Строка представляет собой массив символов, заканчивающийся нуль-символом.
Нуль-символ – это символ с кодом равным 0, что записывается в виде управляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки.
Строку можно проинициализировать:
Char str[10] = “Vasia”;
Оператор char *str = “Vasia” создает указатель на строковую константу.
Библиотека представляет возможности компилирования, сравнения, объединения строк, поиска подстроки, определения длины строки и т.д.
Оба способы работы со строками(через массивы или указатели) приемлемы и имеют свои плюсы и минусы, но в общем случае лучше пользоваться функциями определенными в стандартной библиотеке C++ классом String.
Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Потоки C++ в отличие от функций ввода/вывода в стиле C, обеспечивают надежную работу как со стандартными, так и с определенными пользователем типами данных.
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен.
По виду устройств, с которыми работает поток, можно разделить потоки, на стандартные(клавиатура), файловые(файлы) и строковые(массив символов в оперативной памяти).
Для поддержки стандартных потоков библиотека C++ содержит иерархию классов, построенную на базе классов ios и streambuf. От этих классов наследуется класс istream(входных данных) и ostream(выходных данных).
Стандартные потоки.
Заголовочный файл <iostream> содержит,
cin(связывается с клавиатурой, буферизированный вывод)
cout(связывается с дисплеем, буферизированный вывод)
cerr(связывается с дисплеем, небуферизованный вывод, направляет сообщения об ошибках)
clog( связывается с дисплеем, буферизированный вывод направляет сообщения об ошибках)
В классах istream и ostream операции извлечения из потока >> и помещения в поток << определены путём перегрузки операции сдвига.
#include <iostream.h>
int main(){
int i;
cin >> i;
cout << “Вы ввели” << i;
return 0;
}
Операции << и >> перегружены для всех типов данных, что позволяет автоматически выполнять ввод и вывод, в соответствии с определенным типом величин.