- •1. Краткие теоретические сведения
- •1.1. Объектно-ориентированный подход-Бузюков
- •1.2. Этапы разработки ооп систем
- •1.3. Декомпозиция
- •1.5. Концепции ооп
- •1.6. Синтаксис объявления класса
- •1.7. Методы класса
- •1.8. Объявление объектов
- •1.9. Конструктор
- •1.10. Деструктор
- •1.11. Инкапсуляция
- •1.12. Полиморфизм
- •1.13. Указатель this
- •1.14. Статические члены класса
- •1.15. Дружественные функции и классы
- •1.16. Вложенные классы
- •1.17. Элементы класса
- •1.17.1. Данные-элементы
- •1.17.2. Элементы-функции
- •1.17.3. Доступ к данным-элементам
- •1.17.4. Вызов функций-элементов
- •1.17.5. Указатели на компоненты-функции.
- •2. Задание
- •2.4.1.2. Пример для варианта 30
- •2.4.1.2.1. Разработка алгоритма решения.
- •2.4.1.2.2. Описание структуры класса.
- •2.4.1.2.2.1. Описание полей класса.
- •2.4.1.2.2.2. Функции-аксессоры.
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Простейшие классы и объекты
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Простейший класс. Объединение данных и методов
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример
- •2.4.3.3. Программы
- •2.4.3.3.1. Первый принцип инкапсуляции: объединение данных и методов
- •2.4.3.3.2. Второй принцип инкапсуляции: защита от внешнего вмешательства
- •2.4.3.3.3. Независимость интерфейса от реализации
- •2.4.3.3.4. Конструктор, деструктор
- •2.4.3.3.5. Определение методов вне класса
- •2.4.3.3.6. Конcтантные поля, методы и объекты
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Пользовательский класс
- •2.4.4.1. Условие задания
- •2.4.4.2. Методические указания.
- •1. Пример определения класса.
- •2. Пример реализации конструктора с выдачей сообщения.
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Объектно-ориентированный подход-Бузюков 2
2.4.1.2. Пример для варианта 30
Необходимо разработать программу, реализующую простой класс на основе заданной структуры данных. Кроме того, необходимо разработать набор функций-аксессоров вида (get, set и show). Функция main должна иллюстрировать использование разработанного класса.
Вариант 30
Буддийские монастыри Японии периода Нара |
|||
Название |
Школа |
Количество монахов |
Площадь земли (га) |
Тодайдзи |
Т |
220 |
368.8 |
Якусидзи |
С |
50 |
54.7 |
Дайандзи |
Д |
10 |
12.2 |
Примечание: Т - Тэндай; С - Сингон; Д - Дзедзицу |
2.4.1.2.1. Разработка алгоритма решения.
Алгоритм программы линейный и его программная реализация не представляется затруднительной.
2.4.1.2.2. Описание структуры класса.
2.4.1.2.2.1. Описание полей класса.
Начнем разработку класса с выбора типа данных для его полей. В соответствии с заданием наш класс должен иметь следующие поля:
Название.
Школа.
Количество монахов.
Площадь земли.
Название. Тип этого поля необходимо определить как char * , так как это позволит размещать строки различной длины, не обращая внимания на возможность выхода за границы массива char [... ].
Школа. Данное поле будет хранить всего лишь один символ, поэтому его тип мы определим как char * .
Количество монахов. Для хранения данных данного поля достаточно типа int и так эти данные, не могут принимать отрицательные значения, то для исключения ошибок тип определим как unsigned int.
Площадь земли. Тип данного поля определим однозначно - float.
Итак, таким образом, мы имеем класс с полями:
class church {
char *name; //Название
char school; //Школа
unsigned int count; //Количество монахов
float square; //Площадь земли
.
.
.
}
2.4.1.2.2.2. Функции-аксессоры.
В соответствии с условиями задания наш класс должен иметь три функции-аксессора:
set()
get()
show()
Начнем с функции set() . Задача этой функции - считать данные, вводимые пользователем с клавиатуры, и записать их в поля класса. Т.е для работы с функцией необходимо определить ряд переменных, типы которых соответствуют типам полей класса. Определим эти переменные:
char *n; //Название
char t; //Школа
unsigned int s; //Количество монахов
float h; //Площадь земли
Присваивание значений полям класса производится как обычно с помощью оператора равенства =. Т.е форма записи будет выглядеть следующим образом: поле_класса = определенная_переменная. При присваивании символьных полей необходимо воспользоваться функцией strcpy(), для чего не забыть в список используемых файлов библиотек подключить файл <string.h>
Далее приступим к функции get() . Она отвечает за считывание значений из полей класса. Для записи этих значений нам опять подойдут переменные, определенные выше. Работа функции get() полностью аналогична работе функции set() за исключением того, что в роли приемника значений выступают переменные, а в роли передатчика - поля класса. Т.е форма записи будет выглядеть следующим образом: определенная_переменная= поле_класса .
Необходимо обратить внимание на то, что для корректной работы с символьным полем требуется освободить память, занимаемую переменной, а затем выделить память под строку размером с длину строки, хранящейся в символьном поле класса. Это позволит добиться корректного отображения строк на экране и их правильного сохранения в переменной. Например:
delete[] a; // освобождаем память, занимаемую переменной а
a=new char [strlen(name)+1];// выделяем память под строку
Третья функция-аксессор show() производит вывод на экран значений полей класса и ее реализация не составляет особого труда.