- •Методические указания к лабораторным работам
- •Лабораторная работа №1 простые программы с циклами и операторами консольного ввода/вывода
- •Задание
- •Описание примера
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №2 работа с текстовыми файлами, структурами данных и меню
- •Задание
- •Структурное программирование и функциональная декомпозиция системы
- •Функции
- •Организация меню в консольном приложении
- •Структуры данных
- •Операции с файлами
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №3 разработка и спецификация функций и модулей программы
- •Задание
- •Модульная структура программ
- •Параметры командной строки
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №4 разработка и спецификация структур данных, использование указателей и динамических массивов структур
- •Задание
- •Указатели
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №5 использование объектно-ориентированного программирования в разработке приложений
- •Задание
- •Конструкторы и деструкторы
- •Конструктор по умолчанию
- •Конструктор копирования
- •Массивы объектов
- •Friend-конструкции
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №6 использование наследования, полиморфизма и абстрактных классов
- •Задание
- •Наследование данных и методов
- •Полиморфизм и виртуальные функции
- •Абстрактный класс
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №7
- •Сложные структуры из объектов классов
- •Цель работы - изучение организации различных структур данных и разработка методов манипулирования данными.
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №8 разработка windows-интерфейса приложения
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №9 разработка и использование com-сервера
- •Задание
- •Шаблоны классов
- •Использование библиотеки atl для создания серверов сом
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Литература
Методика выполнения
Разработайте модель организации данных и представьте ее в виде рисунка. Изобразите на схеме выполнение операции перестановки элементов при сортировке массива. Сделайте то же самое для статического массива. Сравните способы организации данных.
Запустите MS Visual Studio и откройте проект консольного приложения из работы №3.
Измените определение переменной, предназначенной для хранения данных в памяти программы.
Сделайте необходимые изменения в объявлениях и определениях функций обработки данных. Учтите, что для доступа к элементам структуры через указатель используется операция ->. Отладьте программу. В процессе отладки используйте заглушки и комментарии для постепенного включения исправлений в программу.
Методом пошаговой детализации разработайте функции поиска, редактирования и сортировки записей. Используйте при этом разработанную модель организации данных и схему выполнения операций.
Содержание отчета
Отчет готовится в письменном или печатном виде один на бригаду. В отчет включить схему организации данных, листинги модулей, результаты тестовых прогонов программы и выводы по п.4 задания. Листинги должны содержать спецификации модулей и функций, иметь структурированный вид и комментарии.
Контрольные вопросы
Что такое указатель?
Каковы основные операции с указателями?
Что такое адресная арифметика?
Как используются указатели в статических массивах?
Какой тип данных имеет идентификатор трехмерного статического массива целых чисел?
Что представляет собой двумерный динамический массив?
Как создаются и уничтожаются динамические массивы?
Как создать динамический массив с переменным количеством элементов в каждой строке?
Лабораторная работа №5 использование объектно-ориентированного программирования в разработке приложений
Цель работы - освоение на практике средств объектно-ориентированного программирования в языке С++ и методов обработки динамического массива объектов класса.
Задание
Разработать на языке С++ 4-ю версию консольного приложение для хранения и отображения сведений об объектах некоторого вида (варианты указаны в работе №2). Объекты в программе представить экземплярами класса.
Для представления набора объектов в оперативной памяти использовать динамический массив (массив указателей на объекты класса).
Обеспечить выполнение следующих операций:
Ввод сведений об объекте.
Вывод данных об объектах на экран в виде таблицы.
Вставка объектов в массив.
Удаление объектов из массива.
Сортировка объектов в массиве.
Поиск объекта в массиве.
Редактирование сведений об объекте.
Сохранение сведений об объектах в бинарном файле.
Загрузка данных из бинарного файла в массив.
Функции консольного и файлового ввода/ вывода и редактирования реализовать в виде методов класса.
Переопределить для разработанного класса операторы << и >> для консольного ввода/вывода.
Краткая теория
Понятие класса в C++
В ООП каждый объект принадлежит определенному классу. Класс — это основной инструмент, посредством которого осуществляется инкапсуляция и скрытие данных. Если описан класс, то определены характеристики всех объектов, принадлежащих этому классу. Функции, инкапсулированные в классе и предназначенные для выполнения каких-либо операций с данными любого из объектов этого класса, принято называть методами класса. В ООП наряду с вызовами обычных внешних функций принято говорить о передаче сообщений объектам классов. Сообщением считается имя того или иного метода.
В общем виде схема описания класса выглядит следующим образом.
class Class_Name {
private:
// Здесь расположены данные и методы, которые недоступны извне обычным,
// прямым способом. Они доступны только в методах класса Class_Name
protected:
// Здесь расположены данные и методы, недоступные прямо.
// Они доступны в методах класса и в методах производных классов
public:
// Здесь расположены данные и методы, доступные обычным,
// прямым способом из внешних процедур
};
При отсутствии описателей члены класса по умолчанию имеют тип private.
class А {
public:
char* Name;
uint Age;
void method ()
{
printf ("\nOk");
}
};
void main()
{
//----- Возможные объявления переменных класса А ---------//
A obj; // Объект класса А
А *р; // Указатель на объекты класса А
A &ref = obj; // Ссылка на класс А
А аrrау[7]; // Массив объектов класса А
A func(); // Функция, возвращающая объект класса А
p=&obj; // р указывает на obj
//----- Обращение к элементам класса ---------//
obj.Age=21; // Прямое обращение к полю данных
p->Name=new char[25]; // То же, но с помощью указателя obj.method(); // Сообщение объекту
(&obj)->method(); //То же, но с помощью адреса
p->method(); // То же, но с помощью указателя }
В операторе (&obj)->method() скобки обязательны, так как приоритет операции выбора с помощью указателя выше, чем операции взятия адреса.
Язык C++ временно допускает неполную декларацию класса:
class А; //Неполная декларация класса А
class В { А *ра; }; // Указатель на класс А — член класса В
class А { В *pb;}; // Класс А декларирован полностью
Тела методов могут быть приведены как внутри каждого из разделов класса, так и вне всего блока описаний. В первом случае за счет увеличения объема памяти сокращается время выполнения. При разработке реальных приложений модули описаний классов (definition module) размещают в отдельных файлах с расширением h. Они компилируются отдельно и именно в них задаются все правила игры с объектами классов. Тела методов размещают вне блока описания класса в этом же файле или в другом файле (с расширением срр). Принадлежность метода классу обозначается в заголовке функции c помощью операции ::.
сlass MyClass{
…. // Объявления переменных и методов
float func();
};
float MyClass::func() {
…. // операторы метода
return x;
}