
Задание 3. Описание классов
Каждому студенту рекомендуется решить хотя бы одну из задач 1-12.
В каждой задаче необходимо описать класс.
В каждом классе должен быть описаны как минимум:
соответствующие поля,
конструкторы,
конструктор копирования (при необходимости),
деструктор (при необходимости),
операция присваивания (при необходимости),
метод ввода объекта с клавиатуры и из файла
метод вывода объекта на экран
операция сравнения ==,
операция <.
Кроме того, в классе должны быть описаны методы и операции, соответствующие варианту задания.
Разработать демонстрационную программу, которая должна обеспечивать выбор с помощью меню и выполнение следующих функций:
начальное формирование массива из N20 объектов класса (ввод с клавиатуры, ввод из заданного массива, ввод из файла);
добавления объекта в массив;
вывод массива объектов на экран;
функции, демонстрирующие работу методов и операций, описанных в варианте задания.
дополнительные функции, указанные в варианте задания.
Варианты заданий
Описать класс РАЦИОНАЛЬНОЕ ЧИСЛО (поля: ЧИСЛИТЕЛЬ, ЗНАМЕНАТЕЛЬ).
Операция класса: сложение двух чисел (+)
Методы класса: поиск наибольшего числа в массиве рациональных чисел, сокращение рационального числа
Функция демонстрационной программы: вычисление суммы всех рациональных чисел из заданного массива.
Описать класс ИСТОРИЧЕСКОЕ СОБЫТИЕ (поля: ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ).
Операция класса: вычисление интервала в днях, прошедшего между двумя заданными историческими событиями (-);
Метод класса: поиск наиболее позднего события в массиве событий.
Функция демонстрационной программы: поиск в массиве заданного события по его названию.
Описать класс ДАТА (поля) ЧИСЛО, МЕСЯЦ, ГОД.
Операция класса: вычисление даты, на N дней вперед по заданной (+).
Метод класса: поиск в массиве дат всех дат заданного года.
Функция демонстрационной программы: удаление из массива заданной даты.
Описать класс ДАТА (поля: ЧИСЛО, МЕСЯЦ, ГОД).
Операция класса: увеличение даты на один день (++)
Метод класса: по году и порядковому номеру дня в году возвращающий соответствующую дату.
Дополнительные функции демонстрационной программы: поиск в массиве дат самой поздней.
Описать класс АЛГЕБРАИЧЕСКИЙ ПОЛИНОМ (поля: СТЕПЕНЬ, КОЭФФИЦИЕНТЫ).
Операция класса: сложение двух заданных полиномов (+).
Метод класса: вывод на экран полиномов с максимальной степенью из массива полиномов.
Функция демонстрационной программы: удаление заданного полинома из массива.
Описать класс АВТОМАШИНА (поля: МАРКА (задается из фиксированного списка), ГОД ВЫПУСКА, НОМЕР, ФАМИЛИЯ ВЛАДЕЛЬЦА).
Операция класса: вычисление разницы в годах выпуска между двумя машинами (-)
Метод класса: сортировка массива машин по фамилии владельца.
Функция демонстрационной программы: поиск в массиве всех машин с заданной маркой.
Описать класс СТУДЕНТ (поля ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ).
Операция класса: вычисление разницы в возрасте (в днях) для двух студентов (-).
Метод класса: поиск в массиве всех студентов заданного года рождения.
Функция демонстрационной программы: удаление студента с заданной фамилией из массива.
Описать класс ИСТОРИЧЕСКОЕ СОБЫТИЕ (поля ГОД, СОБЫТИЕ, УРОВЕНЬ (международный, всероссийский, местный)). Дополнительные функции демонстрационной программы:
Операция класса: вычисление разницы в годах между двумя событиями (-)
Метод класса: сортировка массива событий по комбинации (год, событие);
Функция демонстрационной программы: поиск в массиве событий всех событий заданного уровня.
Описать класс СТУДЕНТ (поля: ФИО, ГОД РОЖДЕНИЯ, НОМЕР ГРУППЫ (задается из фиксированного списка)). Дополнительные функции демонстрационной программы:
Операция класса: вычисление разницы в возрасте для двух студентов (-).
Метод класса: удаление из массива студента с определенной ФИО;
Функция демонстрационной программы: поиск в массиве всех студентов с заданным номером группы.
Описать класс ТОВАР (поля: НАИМЕНОВАНИЕ ТОВАРА, СТРАНА-производитель (задается из фиксированного списка), ОБЪЕМ ПАРТИИ (в штуках)).
Дополнительные Операция класса: увеличение объема партии товара на n%(*)
Метод класса: сортировка массива товаров по наименованию;
Функция демонстрационной программы: поиск всех товаров, импортируемых заданной страной.
Описать класс УЧЕНИК (поля: ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА a-д)).
Операция класса: перевод ученика в следующий класс (++)
Метод класса: сортировка массива учеников по паре (год обучения, название класса);
Функция демонстрационной программы: удаление ученика с заданной ФИО из массива.
Описать класс УЧЕНИК (поля: ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА a-д)), ИТОГОВАЯ ОЦЕНКА)
Операция класса: увеличение итоговой оценки (++)
Метод класса: сортировка массива учеников по фамилии;
Функция демонстрационной программы: поиск всех учеников с отличной итоговой оценкой
Пример решения задачи
Вариант задания.
Описать класс СТУДЕНТ (поля: ФАМИЛИЯ, СПЕЦИАЛЬНОСТЬ, ПОЛ (задается из фиксированного списка), ГОД ОБУЧЕНИЯ).
Операция класса: перевод студента на следующий курс (++)
Метод класса: поиск студента с заданной фамилией в массиве студентов
Функции демонстрационной программы: вывод всех студентов с заданной специальностью.
удаление студента с заданной фамилией
удаление всех студентов заданного года
сортировка списка студентов по фамилии
сортировка списка студентов по специальности
Этап 1.
Для решения данной задачи в файле CStudent.h опишем класс CStudent c указанными полями и двумя конструкторами. Для проверки работы конструкторов сразу определим метод, выводящий на экран все поля.
#include <string>
using namespace std;
enum gender_type{male, female, unknown};
class CStudent
{
/* Поля класса CStudent */
string name;
string speciality;
gender_type gender;
int year;
public:
static int k;//статическое поле класса для хранения количества созданных объектов
CStudent();//конструктор «пустого» студента
CStudent(string, string, gender_type, int);//конструктор создания студента на основе заданных фамилии, специальности, пола и года
void output();// метод вывода данных о студенте на экран
~CStudent(){k--;};//деструктор
string get_name() {return name;}
string get_speciality(){return speciality;}
gender_type get_gender(){return gender;}
int get_year(){return year;}
};
Обратите внимание, что в классе введено статическое поле k, предназначенное для хранения количества созданных в программе объектов. Следовательно, в любом конструкторе это поле должно увеличиваться на единицу, а в деструкторе - уменьшаться на единицу. Поле введено с тестовой целью.
Тела конструкторов и метода output опишем в файле CStudent.cpp
# include "CStudent.h"
# include <iostream>
# include <string>
# include <iomanip>
using namespace std;
CStudent::CStudent(): name(""), speciality(""), gender(unknown), year(0) {k++;}
CStudent::CStudent(string n, string s, gender_type g, int y)
{
name=n;
speciality=s;
gender=g;
year=y;
k++;
}
void CStudent::output()
{
cout.setf(ios::left);
cout<<"\n"<<setw(30)<<name<<setw(30)<<speciality;
if (gender==male) cout<<setw(8)<<"male";
else if (gender==female) cout<<setw(8)<<"female";
else cout<<setw(8)<<"unknown";
cout<<setw(4)<<year;
}