Создан заказ №5398135
29 августа 2020
Объектноориентированное программирование
Как заказчик описал требования к работе:
Работа № 1 Тема: Классы. Открытые и закрытые уровни доступа. Конструкторы. Инициализация данных объекта. Определение методов. Создание объекта в памяти. Стандартные потоки ввода-вывода. 1. В среде программирования на С++ создайте консольный проект с именем LAB1 в каталоге LAB1. 2. В проекте создайте
файлы main.h (заголовочный файл) и main.cpp (файл исходного кода). 3. В файле main.h определите с помощью ключевого слова class объект Person. Данные объекта: КАРТА
тип - char
масштаб - int
полушарие char. Пусть данные имеют закрытый уровень доступа (private). 4. Опишите конструктор объекта, аргументы которого будут инициализировать все данные объекта. 5. Опишите конструктор объекта по умолчанию (без аргу- ментов), проинициализировав все данные. 6. Опишите в объекте функцию void Print() с открытым уров- нем доступа (public), которая будет выводить данные на экран. 7. Откройте файл main.cpp. С помощью директивы #include включите в файл main.cpp заголовочные файлы , , , а также ваш заголовочный файл "Main.h". 8. Ниже определите конструктор объекта, инициализирую- щий все данные объекта значениями аргументов. В теле конст- руктора используйте функцию strcpy(стр1, стр2) для копирования строки имени человека (ФИО). 9. Затем определите функцию void Person::Print(). В теле функции для вывода данных используйте стандартный поток вы- вода cout значение2 >> …; 13. Затем в теле функции main создайте объект Person с по- мощью конструктора по умолчанию и введите данные в объект с клавиатуры, вызвав функцию Input. Выведите данные объекта на экран. Работа № 2 Тема: Создание динамического массива объектов. Дест- руктор объекта. Два типа полиморфизма: принудительное при- ведение типа, перегрузка функций и перегрузка операторов (унарных и бинарных). 1. В среде программирования на С++ создайте консольный проект с именем LAB2 в каталоге LAB2. 2. Переименуйте файл main.h из предыдущей лабораторной в person.h. Создайте файл person.cpp и включите в проект эти два файла. Переместите конструктор и функции объекта Person из main.cpp в файл person.cpp. Таким образом, файл person.h содер- жит описание объекта Person, а файл person.cpp — реализацию объекта Person. 3. Включите в проект файл main.cpp и очистите тело функ- ции main(). 4. Определим объект Group, который будет содержать ди- намический массив объектов Person. Создайте два файла group.h и group.cpp и включите их в проект. 5. В файле group.h определите с помощью ключевого слова class объект Group. 49 Данные объекта: размер массива (целый тип) указатель на массив (тип Person*). Пусть данные имеют закрытый уровень доступа (private). 6. Опишите конструктор объекта с одним аргументом — размер массива (целый тип) и деструктор объекта. 7. Откройте файл group.cpp. С помощью директивы #include включите необходимые заголовочные файлы. 8. Определите конструктор объекта Group. В теле конструк- тора проинициализируйте данные объекта, т.е. проинициализи- руйте размер массива значением аргумента конструктора и выде- лите динамическую память под массив с помощью строки кода: указатель на массив = new Person[размер массива]. 9. В деструкторе объекта освободите память, занимаемую массивом, с помощью строки кода delete [] указатель на массив. Таким образом, мы создали объект Group, который содер- жит массив объектов Person. 10. Определим открытые (public) методы для объекта Group. Напишите функцию void Group::Print(), которая выводит в цикле for все записи массива на экран. В теле цикла примените ранее написанную функцию Print() для объекта Person. 11. Напишите функцию int Group::Size(), которая возвраща- ет размер массива. 12. Напишите функции void PutPerson(int i, Person& man); и Person& GetPerson(int i);, первая функция заносит объект man типа Person в i-й элемент массива, вторая функция возвращает объект типа Person из i-го элемента массива. 13. Заполните массив данными и затем выведите их на эк- ран. Для этого в теле функции int main() сначала определите мас- сив имен, которые будут заносится в поле ФИО объекта Person, например, 50 char names[5][25] = {"A", "B", "C", "D", "E"};. Затем создайте объект с именем group типа Group размером пять записей, т.е. Group group(5);. 14. Ниже с помощью цикла for заполните массив данными. Для этого в теле цикла создайте объект Person, проинициализи- ровав все его данные, и с помощью функции PutPerson занесите объект в массив. 15. Выведите массив на экран с помощью строки кода: group.Print();. Получилось? Если да, то вы научились создавать динамический массив объектов, определять функции работы с таким массивом и выводить его на экран. 16. В этой части лабораторной работы изучим первые два типа полиморфизма — это а) принудительное приведение типа; б) перегрузка функций и операторов. 17. Напишите функцию приведения типа. Для этого с по- мощью ключевого слова operator напишите функцию объекта Person, которая преобразует тип Person в double. Пусть функция возвращает возраст человека, например, Person::operator double() { return this->Age; }. Что означает ключевое слово this? 18. Проверьте функцию преобразования типа. В функции int main() далее определите переменную double и присвойте ей объект Person, например: double age = group.GetPerson(2);. То есть совершается неявное преобразование из типа Person в тип double при обращении к объекту. Выведите значение пере- менной на экран. 19. Перегруженные функции имеют одинаковое название, но разный возвращаемый тип или/и разный список аргументов. Определим в объекте Group две функции с одинаковым именем, например double Age(); и double Age(int limit);. Первая функция пусть возвращает средний возраст группы людей, а вторая функ- 51 ция пусть возвращает средний возраст людей в группе, возраст которых не больше некоторого граничного значения limit. Функ- ции отличаются списком аргументов. 20. Проверьте работу перегруженных функций, отобразив на экране подсчитанные два значения среднего возраста. 21. Перегрузите оператор индексирования. Если раньше, чтобы обратиться к элементу массива, нам необходимо было вы- зывать функцию GetPerson, то, определив оператор индексирова- ния, мы будем использовать только квадратные скобки. Сравните две строки кода: Person man = group.GetPerson(2); Person man = group[2]; В объекте Group с помощью ключевого слова operator опре- делите оператор индексирования, например: Person& Group::operator[](int i). В теле оператора напишите код, возвращающий i-ый эле- мент массива, т.е. объект Person. 22. Выведите на экран с помощью оператора индексирова- ния любой один элемент массива group, например третий. 23. Перегрузим бинарный оператор, например оператор сложения (+), для объекта Person. Пусть оператор сложения бу- дет возвращать суммарный возраст двух человек. Опишем в объ- екте Person данный оператор как дружественную функцию с по- мощью ключевого слова friend, например: friend double operator+(Person& p1, Person& p2); Эта строка кода означает, что оператор сложения не при- надлежит объекту, но ему доступны все закрытые данные и мето- ды объекта. В файле person.cpp определите оператор сложения, например: double operator + (Person& p1, Person& p2) { return (p1.Age + p2.Age); } 52 Здесь мы напрямую обращаемся к закрытому полю Age объ- екта Person. 24. Проверим работу оператора с помощью следующих строк кода: double sum = group[1] + group[3]; cout
код имеется нужно его исправить по замечания
подробнее
Заказчик
заплатил
заплатил
200 ₽
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
Автор24
20 дней
Заказчик принял работу без использования гарантии
30 августа 2020
Заказ завершен, заказчик получил финальный файл с работой
5
Объектноориентированное программирование.jpg
2020-09-02 06:19
Последний отзыв студента о бирже Автор24
Общая оценка
4
Положительно
Спасибо огромное автору! Работа выполнена раньше срока, очень качественно. Программа отличная. Супер! Автор очень выручил. Настоящий профессионал. Самый лучший автор.