Advertisement
Infiniti_Inter

new

Apr 14th, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.76 KB | None | 0 0
  1. /*
  2.     Все методы вынесены за класс
  3.     Перегружен оператор "присваивания"
  4.     Перегружен оператор "сравнения"
  5.     Добавлен конструктор "копирования"
  6.     Перегружен оператор "меньше" для класса
  7.     Добавлен "деструктор"
  8.  
  9. */
  10.  
  11.  
  12. #include <iostream>
  13. #include <math.h>
  14. #include <string>
  15. #include <vector>
  16. #include <algorithm>
  17.  
  18. using namespace std;
  19.  
  20. // Класс Донор, все методы, конструкторы, деструктор определены после функции "int main()"
  21.  
  22. class Donor
  23. {
  24.     // изначально все поля класса имеют модификатор доступа "private"
  25.     string firstName, secondName, thirdName;//ФИО
  26.     int passID;//номер паспорта
  27.     int countOfDonate;//счетчик сдач крови
  28.     double totalDonate;//всего крови сдано
  29.     char group;//Группа крови ... на рукаве...
  30.     string rhesus;//Резус фактор
  31.  
  32. public://указываем модификатор доступа(из любой точки программы)
  33.  
  34. /*
  35.     Стандартный конструктор.
  36.  
  37.     Пример создания объекта:
  38.  
  39.     Donor a;
  40. */
  41.     Donor();
  42.  
  43.  
  44.     /*
  45.  
  46.         Конструктор с передачей параметров.
  47.         Пример создания объекта:
  48.  
  49.         Donor a("Popov", "Danul", "Akakievi4", 1181,  5, 66.6, 'A', "-");
  50.  
  51.     */
  52.     Donor(string firstName, string secondName, string thirdName, int passID, int countOfDonate, double totalDonate, char group, string rhesus);
  53.  
  54.  
  55.     /*
  56.         Конструктор копирования.
  57.         пример использования:
  58.  
  59.         Donor a("aba", "b", "c", 123456, 0, 0.0, 'C', "-");//создание объекта "a"
  60.         Donor b(a); // копирование объекта "a" в объект "b";
  61.  
  62.         Так же, во время операции "=", происходит копирование правого операнда,
  63.         в записи a = b, сначала создается копия b, а потом происходит присваивание.
  64.  
  65.     */
  66.     Donor(const Donor & other);
  67.  
  68.  
  69.  
  70.     /*
  71.         Деструктор
  72.     */
  73.     ~Donor();
  74.  
  75.     /* Возвращает Фамилию */
  76.     string getFirstName();
  77.  
  78.  
  79.     /* Возвращает Имя */
  80.     string getSecondName();
  81.  
  82.  
  83.     /* Возвращает Отчество*/
  84.     string getThirdName();
  85.  
  86.  
  87.     /* Возвращает номер паспорта*/
  88.     int getPassID();
  89.  
  90.  
  91.     /* Возвращает количество сдач крови*/
  92.     int getCountOfDonate();
  93.  
  94.  
  95.     /* Возвращает объем сданной крови*/
  96.     double getTotalDonate();
  97.  
  98.  
  99.     /* Возвращает группу крови */
  100.     char getGroup();
  101.  
  102.  
  103.     /* Возвращает резус фактор */
  104.     string getRhesus();
  105.  
  106.  
  107.     /* Метод увеличивает количество сдач крови на 1 и объем на "donate" */
  108.     void inc(double donate);
  109.  
  110.  
  111.     /* Метод выводит объект на экран */
  112.     void print();
  113.  
  114.     /*
  115.  
  116.         Перегрузка оператора "<" для сравнения объектов класса Donate и использования sort() из библиотеки STL
  117.  
  118.     */
  119.     bool operator <(Donor & other);
  120.  
  121.  
  122.  
  123.     /*
  124.         Перегрузка оператора сравнения
  125.     */
  126.  
  127.     bool operator ==(Donor & other);
  128.  
  129.  
  130.  
  131.     /*
  132.         Перегрузка оператора присваивания
  133.     */
  134.     Donor & operator =(Donor & other);
  135. };
  136.  
  137.  
  138.  
  139. int main()
  140. {
  141.  
  142.     Donor a("aba", "b", "c", 123456, 0, 0.0, 'A', "-");//создаем объект класса Donate
  143.     Donor b("aba", "caba", "caba", 555431, 0, 2.1, 'B', "+");//создаем объект класса Donate
  144.  
  145. #ifndef Debug // если не определен Debug, то выполнится условие
  146.     system("pause");
  147. #else //  (после всех #include вписать "#define Debug" без кавычек и условие не будет выполнятся)
  148.     return 0;
  149. #endif
  150.  
  151. }
  152.  
  153. #ifndef SHOW my metods
  154.  
  155. Donor::Donor()
  156. {
  157.     firstName = secondName = thirdName = rhesus = "a";
  158.     passID = countOfDonate = totalDonate = 0;
  159.     group = '*';
  160. }
  161.  
  162. Donor::Donor(string firstName, string secondName, string thirdName, int passID, int countOfDonate, double totalDonate, char group, string rhesus)
  163. {
  164.     this->firstName = firstName;
  165.     this->secondName = secondName;
  166.     this->thirdName = thirdName;
  167.     this->passID = passID;
  168.     this->countOfDonate = countOfDonate;
  169.     this->totalDonate = totalDonate;
  170.     this->group = group;
  171.     this->rhesus = rhesus;
  172. }
  173.  
  174. Donor::Donor(const Donor & other)
  175. {
  176.     this->firstName = other.firstName;
  177.     this->secondName = other.secondName;
  178.     this->thirdName = other.thirdName;
  179.     this->passID = other.passID;
  180.     this->countOfDonate = other.countOfDonate;
  181.     this->totalDonate = other.totalDonate;
  182.     this->group = other.group;
  183.     this->rhesus = other.rhesus;
  184. }
  185.  
  186. Donor & Donor::operator=(Donor & other)
  187. {
  188.     this->firstName = other.firstName;
  189.     this->secondName = other.secondName;
  190.     this->thirdName = other.thirdName;
  191.     this->passID = other.passID;
  192.     this->countOfDonate = other.countOfDonate;
  193.     this->totalDonate = other.totalDonate;
  194.     this->group = other.group;
  195.     this->rhesus = other.rhesus;
  196.     return *this;
  197. }
  198. bool Donor::operator<(Donor & other)
  199. {
  200.     if (this->getGroup() < other.getGroup())
  201.         return true;
  202.     if (this->getGroup() == other.getGroup() && this->getTotalDonate() < other.getTotalDonate())
  203.         return true;
  204.     if (this->getGroup() == other.getGroup() && this->getTotalDonate() == other.getTotalDonate() && this->getFirstName() < other.getFirstName())
  205.         return true;
  206.     if (this->getGroup() == other.getGroup() && this->getTotalDonate() == other.getTotalDonate() && this->getFirstName() == other.getFirstName() &&
  207.         this->getSecondName() < other.getSecondName())
  208.         return true;
  209.     if (this->getGroup() == other.getGroup() && this->getTotalDonate() == other.getTotalDonate() && this->getFirstName() == other.getFirstName() &&
  210.         this->getSecondName() == other.getSecondName() && this->getThirdName() < other.getThirdName())
  211.         return true;
  212.     return false;
  213. }
  214.  
  215. bool Donor::operator==(Donor & other)
  216. {
  217.     if (this->firstName == other.firstName && this->secondName == other.secondName &&
  218.         this->thirdName == other.thirdName && this->group == other.group &&
  219.         this->passID == other.passID && this->rhesus == other.rhesus) return true;
  220.     return false;
  221.  
  222. }
  223.  
  224. Donor::~Donor()
  225. {
  226.     /*
  227.         Если бы класс использовал динамическую память(например: массивы или иные указатели),
  228.         то их нужно было удалять в ручную командой deltete. В данном случае можно деструктор не писать
  229.     */
  230. }
  231.  
  232. string Donor::getFirstName()
  233. {
  234.     return firstName;
  235. }
  236.  
  237. string Donor::getSecondName()
  238. {
  239.     return secondName;
  240. }
  241.  
  242. string Donor::getThirdName()
  243. {
  244.     return thirdName;
  245. }
  246.  
  247. int Donor::getPassID()
  248. {
  249.     return passID;
  250. }
  251.  
  252. int Donor::getCountOfDonate()
  253. {
  254.     return countOfDonate;
  255. }
  256.  
  257. double Donor::getTotalDonate()
  258. {
  259.     return totalDonate;
  260. }
  261.  
  262. char Donor::getGroup()
  263. {
  264.     return group;
  265. }
  266.  
  267. string Donor::getRhesus()
  268. {
  269.     return rhesus;
  270. }
  271.  
  272. void Donor::inc(double donate)
  273. {
  274.     totalDonate += donate;
  275.     countOfDonate++;
  276. }
  277.  
  278. void Donor::print()
  279. {
  280.     cout << "first name: " << firstName << endl;
  281.     cout << "second name: " << secondName << endl;
  282.     cout << "third name: " << thirdName << endl;
  283.     cout << "PassID: " << passID << endl;
  284.     cout << "count of donate: " << countOfDonate << endl;
  285.     cout << "total donate: " << totalDonate << endl;
  286.     cout << "group: " << group << endl;
  287.     cout << "rhesus factor: " << rhesus;
  288.     cout << endl << endl;
  289. }
  290.  
  291.  
  292.  
  293. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement