Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Улучшенная версия: https://pastebin.com/GVUtjWys
- В нее входит:
- -Все методы вынесены за класс
- -Перегружен оператор "присваивания
- -Перегружен оператор "меньше" для класса[здесь оператор "<" перегружен глобально]"
- -Перегружен оператор "сравнения"
- -Добавлен конструктор "копирования"
- -Добавлен "деструктор"
- Задание: создать класс Donor
- Данные: фамилия, имя, отчество, номер паспорта, количество сдач
- крови, объем сданной крови, группа, резус
- Методы:
- 1. Получения значения полей (каждого в отдельности)
- 2. Сдачи крови (увеличивающий количество на 1 и объем - на
- параметр)
- Операция сравнения: по группе, при совпадении группы – по объему,
- при совпадении – по фамилии, имени, отчеству.
- Желательно создание типа перечисление – группы крови.
- */
- #include <iostream>
- #include <math.h>
- #include <string>
- #include <vector>
- #include <algorithm>
- using namespace std;
- // создание класса Донор
- class Donor {
- string firstName, secondName, thirdName;//ФИО
- int passID;//номер паспорта
- int countOfDonate;//счетчик сдач крови
- double totalDonate;//всего крови сдано
- char group;//Группа крови ... на рукаве...
- string rhesus;//Резус фактор
- public://указываем уровень доступа: из любой точки программы
- /*
- Стандартный конструктор, пример создания объекта:
- Donor a;
- */
- Donor(){
- firstName = secondName = thirdName = rhesus = "a";
- passID = countOfDonate = totalDonate = 0;
- group = '*';
- }
- /*
- Конструктор с передачей параметров, пример создания объекта:
- Donor a("Popov", "Danul", "Akakievi4", 1181, 5, 66.6, 'A', "-");
- */
- Donor(string firstName, string secondName, string thirdName, int passID, int countOfDonate, double totalDonate, char group, string rhesus) {
- this->firstName = firstName;
- this->secondName = secondName;
- this->thirdName = thirdName;
- this->passID = passID;
- this->countOfDonate = countOfDonate;
- this->totalDonate = totalDonate;
- this->group = group;
- this->rhesus = rhesus;
- }
- /* Возвращает Фамилию */
- string getFirstName()
- {
- return firstName;
- }
- /* Возвращает Имя */
- string getSecondName()
- {
- return secondName;
- }
- /* Возвращает Отчество*/
- string getThirdName()
- {
- return thirdName;
- }
- /* Возвращает номер паспорта*/
- int getPassID()
- {
- return passID;
- }
- /* Возвращает количество сдач крови*/
- int getCountOfDonate()
- {
- return countOfDonate;
- }
- /* Возвращает объем сданной крови*/
- double getTotalDonate()
- {
- return totalDonate;
- }
- /* Возвращает группу крови */
- char getGroup()
- {
- return group;
- }
- /* Возвращает резус фактор */
- string getRhesus()
- {
- return rhesus;
- }
- /* Метод увеличивает количество сдач крови на 1 и объем на "donate" */
- void inc(double donate)
- {
- totalDonate += donate;
- countOfDonate++;
- }
- /* Метод выводит объект на экран */
- void print()
- {
- cout << "first name: " << firstName << endl;
- cout << "second name: " << secondName << endl;
- cout << "third name: " << thirdName << endl;
- cout << "PassID: " << passID << endl;
- cout << "count of donate: " << countOfDonate << endl;
- cout << "total donate: " << totalDonate << endl;
- cout << "group: " << group << endl;
- cout << "rhesus factor: " << rhesus;
- cout << endl << endl;
- }
- };
- /*
- Глобальная Перегрузка оператора "<" для сравнения объектов класса Donate
- */
- bool operator < (Donor a, Donor b)
- {
- char aGroup = a.getGroup();
- double aTotalDonate = a.getTotalDonate();
- string aFirstName = a.getFirstName();
- string aSecondName = a.getSecondName();
- string aThirdName = a.getThirdName();
- char bGroup = b.getGroup();
- double bTotalDonate = b.getTotalDonate();
- string bFirstName = b.getFirstName();
- string bSecondName = b.getSecondName();
- string bThirdName = b.getThirdName();
- if (aGroup < bGroup)
- return true;
- if (aGroup == bGroup && aTotalDonate < bTotalDonate)
- return true;
- if (aGroup == bGroup && aTotalDonate == bTotalDonate && aFirstName < bFirstName)
- return true;
- if (aGroup == bGroup && aTotalDonate == bTotalDonate && aFirstName == bFirstName && aSecondName < bSecondName)
- return true;
- if (aGroup == bGroup && aTotalDonate == bTotalDonate && aFirstName == bFirstName && aSecondName == bSecondName &&
- aThirdName < bThirdName)
- return true;
- return false;
- }
- int main()
- {
- Donor a("aba", "b", "c", 123456, 0, 0.0, 'C', "-");//создаем объект класса Donate
- Donor b("aba", "caba", "caba", 555431, 0, 2.1, 'B', "+");//создаем объект класса Donate
- cout << (a < b ? "true" : "false") << endl;// проверка a < b, если да, то выведет "true", иначе - "false"
- vector<Donor> vec;// создаем вектор объектов Donor
- vec.push_back(a);// пушим a
- vec.push_back(b);// пушим b
- sort(vec.begin(), vec.end()); // STL сортировка, в которой используется оператор <, который был перегружен ранее
- for(int i = 0; i < (int)vec.size(); ++i)
- vec[i].print();// вывод на экран
- #ifndef Debug // если не определен Debug, то выполнится условие
- system("pause");
- #else // (после всех #include вписать "#define Debug" без кавычек и условие не будет выполнятся)
- return 0;
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement