# Задачи - ООП, Седмица 12, 09.05.2024 \n GitHub classroom: [url https://classroom.github.com/a/o7hNz1pr classroom.github.com/a/o7hNz1pr] ### Задача 1 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise1 Решение] .comment Multiple inheritance Реализирайте клас `[Publication]`, който пази: .bulleted - низ от максимална дължина 1023, съхраняващ автори и - втори низ с максимална дължина от 255, съхраняващ име на (научно) списание. Реализирайте клас `[TextDocument]`, който пази неоразмеряем низ с текстово съдържание и неговия размер. Реализирайте наследник на двата класа `[ScientificPaper]`, който допълнително пази и низ от максимално 511 знака, съдържащ име на научна дисциплина. За всички класове реазлизирайте оператор <<. ### Задача 2 *[Не говорим за нея, условието беше толкова сбъркано, че се наложи да я сваля]* ### Задача 3 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise3 Решение] Реализирайте абстрактен клас `[MobileDevice]`, който запазва: .bulleted - телефонен номер като цяло неотрицателно число и - масив с максимална дължина от 511 знака за текстово съобщение. Допълнително нека: .bulleted - класът да задължава имплементацията на метод `[Show]`, - да има член-функция `[CanAccept]`, която по подадено "хиперсъобщение" връща дали неговия номер съвпада с този на класа.\n Под "хиперсъобщение" имаме предвид низ, който започва с телефонния номер, след това има шпация и след това е самото съобщение. - да има член-функция `[Accept]`, която по подадено "хиперсъобщение" запазва текстовото съобщение. Ако номерът не съответства тогава хвърля грешка. Реализирайте негов наследник `[Telephone]`, за който `[Show]` изкарва съобщението на екрана. 'footnote pager От времето без мобилни телефони, хората са си купували пейджъри, които ти пращат нотификация ако някой ти звънне и не вдигнеш. Пейджърите са "заключени" за определени региони, тоест някой ти се обажда, не вдигаш, и всички телекомуникционни кули в региона изпращат съобщение "на теб ти звънна този", и пейджъра като засече сигнала ти писука. Мисля че също можеш да пращаш кратки съобщения. Не е било хич сигурна система, все още се ползва от болници в някои държави. Реализирайте втори негов наследник `[Pager]` [$pager], който съхранява име на файл (като динамично-заделен низ) и `[Show]` изкарва съобщението в съответния файл. Разбира се, имплементирайте голяма петица. Реализирайте клас `[TelecommunicationCompany]`, който съхранява динамично-заделен и оразмеряем масив от (указатели към) `[MobileDevice]`. Имплементирайте всичко от голяма петица. ### Задача 4 .solution-link [url https://github.com/Syndamia/oop-2023-solutions/blob/main/week12/Exercise4 Решение] .comment Multiple inheritance with mixed class types, polymorphic container, and copying Реализирайте клас `[Employee]`, който запазва: .bulleted - заплата като число с плаваща запетая и - производителост също като число с плаваща запетая. Производителността е множител на заплатата, тоест ако има производителност 0.5 значи работи като човек на който му плащат с половината заплата. Реализирайте абстрактен клас `[Person]`, който запазва: .bulleted - име като низ с произволна дължина и - възраст като цяло неотрицателно число Допълнително задължава реализацията на член-функция `[Workload]`, връщаща стойност с плаваща запетая. Разбира се имплементирайте голяма петица. Реализирайте наследник на двата класа на име `[Developer]`, който допълнително запазва: .bulleted - цяло неотрицателно число - брой проекти в които участва, и - второ което е брой проекти на които ще се пуска нова версия. Реализирайте оператори `[++]` и `[--]`, като префиксните променят броя проекти на които ще се пуска нова версия, докато постфиксните променя броя проекти в които участва.\n За него `[Workload]` се определя като 1.1 по всеки проект и допълнително по 2.3 за всеки проект на който ще се пуска нова версия. Реализирайте наследник на двата класа на име `[Manager]`, който допълнително запазва динамично-заделен и оразмеряем масив от `[Person]`, които менижира. Имплементирайте голяма петица и: .bulleted - оператори `[==]` и `[!=]`, сравняващи хора по име - член-функция `[StartManaging]`, която приема `[Person]` и го запазва, и - член-функция `[StopManaging]`, която приема `[Person]` и го премахва от масива ако съществува в него. `[Workload]` се определя като 0.6 на човек който менижира. Финално реализирайте клас `[Company]`, който запазва масив от 128 указателя `[Person]` в компанията. Имплементирайте негова член-функция: .bulleted - `[PaymentDifference]`, която връща с колко платената заплата на всички служители се отличава с тази според тяхната производителност