Задачи - ООП, Седмица 13, 16.05.2024

GitHub classroom: classroom.github.com/a/GvV1wrC1

warn Навсякъде, където е нужно, реализирайте голяма петица.

Преговорни

Задача 1 - Множествено наследяване

< Решение >

Реализирайте клас String, който запазва динамичен низ с фиксиран размер.

Реализирайте клас IndexArray, който запазва динамичен масив с фиксиран размер от цели числа - индекси.

warn Не правете общ родител, който имплементира динамичен масив!

Реализирайте наследник на двата класа, WordsString, при който индексите определят началото на всяка дума от запазения низ. Индексите се дефинират при конструктора.

Лесни

Задача 2

< Решение >

Реализирайте шаблонен клас Container, който съхранява масив с фиксиран размер от елементи с подаден тип. Не трябва да реализирате нищо повече от задължителните компоненти (голяма петица).

Реализирайте негов наследник Indexable, който реализира оператор[].

Реализирайте втори негов наследник Resizeable, който реализира член-функция InsertAt, приемаща елемент и индекс, и която вмъква елемента на даден индекс. Разбира се, може да се наложи оразмеряване на масива.

Реализирайте наследник Vector на Indexable и Resizeable, който реализира оператор[] и член-функции:

important Не забравяйте за диамантния проблем!

Задача 3

< Решение >

Реализирайте клас User, който запазва потребителско име и парола като низове с произволна дължина, заедно с булев флаг banned, определящ дали акаунтът може да прави действия. Потребителско име не може да съдържа шпации.

Реализирайте клас Thread, който запазва масив с произволна дължина, от низове с произволна дължина. Имплементирайте член-функция:

Реализирайте наследник ThreadModerator на User, който може да променя Thread обекти, без да се нуждае от публични член-функции в Thread. Имплементирайте методи:

Реализирайте наследник UserModerator на User, който може да променя User обекти, без да се нуждае от публични член-функции в User. Имплементирайте методите:

Реализирайте наследник Administrator на ThreadModerator и UserModerator, който може да прави всичко, което и родителите могат.

important Не забравяйте за диамантния проблем!

Трудни

Задача 4

Реализирайте абстрактен клас ShopLocation, който съхранява член-данни:

Имплементирате методи:

Реализирайте шаблонен клас Inventory, който съхранява фиксиран брой елементи и техните неотрицателни бройки (количества). Имплементирайте член-функции:

Реализирайте абстрактен шаблонен наследник DeliverableInventory на Inventory, който е инвентар с максимум 2048 елемента и допълнително задължава имплементацията на:

Реализирайте наследник на DeliverableInventory, склад Warehouse, който допълнително запазва разстояние от града в километри и имплементира ShippingDelay по следната логика:

Доставка не може да се случи преди 9 сутринта и след 18 вечерта. Ако попадне в този диапазон, тогава се отлага за най-скорошния следващ възможен час.

Реализирайте шаблонен наследник магазин Shop на ShopLocation и Inventory, който е инвентар с максимум 256 елемента, запазващ:

и който имплементира методи:

Реализирайте шаблонен клас WebStore, който запазва оразмеряеми масиви от Shop и Warehouse. Имплементирайте:

Последно реализирайте клас Book, който запазва заглавие на книга и име на автор като низове с максимална дължина от 127 знака. Имплементирайте оператор<<, който изкарва съответната книга в произволен формат.

В главната функция реализирайте WebStore от книги, заедно с набор от книги, магазини и складове по ваш избор. Нека в началото на програмата да приемате от потребителя сегашното време и адрес, след това изкарайте на екрана всички ункални книги с индекси. Накрая потребителя може да въведе индекс на книга и да получи информация кои отворени сега магазини имат съответната книга и кога най-скоро може да бъде доставена от склад.