Advertisement
Infiniti_Inter

Пример работы с классами

Apr 10th, 2019
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.42 KB | None | 0 0
  1. /*
  2. Улучшенная версия: https://pastebin.com/GVUtjWys
  3. В нее входит:
  4.     -Все методы вынесены за класс
  5.     -Перегружен оператор "присваивания
  6.     -Перегружен оператор "меньше" для класса[здесь оператор "<" перегружен глобально]"
  7.     -Перегружен оператор "сравнения"
  8.     -Добавлен конструктор "копирования"
  9.     -Добавлен "деструктор"
  10.  
  11. Задание: создать класс Donor
  12.  
  13. Данные: фамилия, имя, отчество, номер паспорта, количество сдач
  14.  
  15. крови, объем сданной крови, группа, резус
  16.  
  17. Методы:
  18.  
  19. 1. Получения значения полей (каждого в отдельности)
  20.  
  21. 2. Сдачи крови (увеличивающий количество на 1 и объем - на
  22.  
  23. параметр)
  24.  
  25. Операция сравнения: по группе, при совпадении группы – по объему,
  26.  
  27. при совпадении – по фамилии, имени, отчеству.
  28.  
  29. Желательно создание типа перечисление – группы крови.
  30.  
  31. */
  32.  
  33.  
  34. #include <iostream>
  35. #include <math.h>
  36. #include <string>
  37. #include <vector>
  38. #include <algorithm>
  39.  
  40. using namespace std;
  41.  
  42. // создание класса Донор
  43. class Donor {
  44.     string firstName, secondName, thirdName;//ФИО
  45.     int passID;//номер паспорта
  46.     int countOfDonate;//счетчик сдач крови
  47.     double totalDonate;//всего крови сдано
  48.     char group;//Группа крови ... на рукаве...
  49.     string rhesus;//Резус фактор
  50.    
  51. public://указываем уровень доступа: из любой точки программы
  52.  
  53.     /*
  54.  
  55.     Стандартный конструктор, пример создания объекта:
  56.    
  57.     Donor a;
  58.  
  59.     */
  60.     Donor(){
  61.         firstName = secondName = thirdName = rhesus = "a";
  62.         passID = countOfDonate = totalDonate = 0;
  63.         group = '*';
  64.     }
  65.     /*
  66.    
  67.     Конструктор с передачей параметров, пример создания объекта:
  68.  
  69.     Donor a("Popov", "Danul", "Akakievi4", 1181,  5, 66.6, 'A', "-");
  70.  
  71.     */
  72.     Donor(string firstName, string secondName, string thirdName, int passID, int countOfDonate, double totalDonate, char group, string rhesus) {
  73.         this->firstName = firstName;
  74.         this->secondName = secondName;
  75.         this->thirdName = thirdName;
  76.         this->passID = passID;
  77.         this->countOfDonate = countOfDonate;
  78.         this->totalDonate = totalDonate;
  79.         this->group = group;
  80.         this->rhesus = rhesus;
  81.     }
  82.    
  83.         /* Возвращает Фамилию */
  84.         string getFirstName()
  85.         {
  86.             return firstName;
  87.         }
  88.         /* Возвращает Имя */
  89.         string getSecondName()
  90.         {
  91.             return secondName;
  92.         }
  93.         /* Возвращает Отчество*/
  94.         string getThirdName()
  95.         {
  96.             return thirdName;
  97.         }
  98.         /* Возвращает номер паспорта*/
  99.         int getPassID()
  100.         {
  101.             return passID;
  102.         }
  103.         /* Возвращает количество сдач крови*/
  104.         int getCountOfDonate()
  105.         {
  106.             return countOfDonate;
  107.         }
  108.         /* Возвращает объем сданной крови*/
  109.         double getTotalDonate()
  110.         {
  111.             return totalDonate;
  112.         }
  113.         /* Возвращает группу крови */
  114.         char getGroup()
  115.         {
  116.             return group;
  117.         }
  118.         /* Возвращает резус фактор */
  119.         string getRhesus()
  120.         {
  121.             return rhesus;
  122.         }
  123.         /* Метод увеличивает количество сдач крови на 1 и объем на "donate" */
  124.         void inc(double donate)
  125.         {
  126.             totalDonate += donate;
  127.             countOfDonate++;
  128.         }
  129.        
  130.         /* Метод выводит объект на экран */
  131.         void print()
  132.         {
  133.             cout << "first name: " << firstName << endl;
  134.             cout << "second name: " << secondName << endl;
  135.             cout << "third name: " << thirdName << endl;
  136.             cout << "PassID: " << passID << endl;
  137.             cout << "count of donate: " << countOfDonate << endl;
  138.             cout << "total donate: " << totalDonate << endl;
  139.             cout << "group: " << group << endl;
  140.             cout << "rhesus factor: " << rhesus;
  141.             cout << endl << endl;
  142.         }
  143.        
  144.  
  145. };
  146. /*
  147.  
  148. Глобальная Перегрузка оператора "<" для сравнения объектов класса Donate
  149.    
  150. */
  151. bool operator < (Donor a, Donor b)
  152. {
  153.     char aGroup = a.getGroup();
  154.     double aTotalDonate = a.getTotalDonate();
  155.     string aFirstName = a.getFirstName();
  156.     string aSecondName = a.getSecondName();
  157.     string aThirdName = a.getThirdName();
  158.  
  159.     char bGroup = b.getGroup();
  160.     double bTotalDonate = b.getTotalDonate();
  161.     string bFirstName = b.getFirstName();
  162.     string bSecondName = b.getSecondName();
  163.     string bThirdName = b.getThirdName();
  164.  
  165.    
  166.     if (aGroup < bGroup)
  167.         return true;
  168.     if (aGroup == bGroup && aTotalDonate < bTotalDonate)
  169.             return true;
  170.     if (aGroup == bGroup && aTotalDonate == bTotalDonate && aFirstName < bFirstName)
  171.         return true;
  172.     if (aGroup == bGroup && aTotalDonate == bTotalDonate && aFirstName == bFirstName && aSecondName < bSecondName)
  173.         return true;
  174.     if (aGroup == bGroup && aTotalDonate  == bTotalDonate && aFirstName == bFirstName && aSecondName == bSecondName &&
  175.         aThirdName < bThirdName)
  176.             return true;
  177.    
  178.     return false;
  179. }
  180.  
  181. int main()
  182. {
  183.     Donor a("aba", "b", "c", 123456,  0, 0.0, 'C', "-");//создаем объект класса Donate
  184.     Donor b("aba", "caba", "caba", 555431, 0, 2.1, 'B', "+");//создаем объект класса Donate
  185.     cout << (a < b ? "true" : "false") << endl;// проверка a < b, если да, то выведет "true", иначе - "false"
  186.     vector<Donor> vec;// создаем вектор объектов Donor
  187.     vec.push_back(a);// пушим a
  188.     vec.push_back(b);// пушим b
  189.     sort(vec.begin(), vec.end()); // STL сортировка, в которой используется оператор <, который был перегружен ранее
  190.     for(int i = 0; i < (int)vec.size(); ++i)
  191.         vec[i].print();// вывод на экран
  192.    
  193. #ifndef Debug // если не определен Debug, то выполнится условие
  194.     system("pause");
  195. #else //  (после всех #include вписать "#define Debug" без кавычек и условие не будет выполнятся)
  196.     return 0;
  197. #endif
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement