From 3f0d1b01674142c0258221c64b825af2d07d3d5c Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Fri, 19 Mar 2021 23:14:50 +0000 Subject: [PATCH 1/6] Setting up GitHub Classroom Feedback From 96c562b482bbf587a40504d22d1b3f81a557eed8 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Sat, 20 Mar 2021 08:32:19 +0000 Subject: [PATCH 2/6] Update GitHub Classroom Autograding From 94e0fe65c5649bf0bb643b478eb75c286673fdcb Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Sat, 20 Mar 2021 08:32:20 +0000 Subject: [PATCH 3/6] Update GitHub Classroom Autograding Workflow From 47d060f6e3686ef0a7fdac7ef0bb809571d5907b Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Sun, 21 Mar 2021 12:35:32 +0000 Subject: [PATCH 4/6] Update GitHub Classroom Autograding From d4122c839fc1f49cde42788554458805b48282f0 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Sun, 21 Mar 2021 12:35:32 +0000 Subject: [PATCH 5/6] Update GitHub Classroom Autograding Workflow From 0199137914f158ddaebe63d6bf985c8ed3a697cf Mon Sep 17 00:00:00 2001 From: Varvara Korneeva Date: Sun, 30 May 2021 17:36:59 +0300 Subject: [PATCH 6/6] h01 --- src/author.cpp | 6 +++++- src/book.cpp | 13 +++++++++++-- src/book_store.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/author.cpp b/src/author.cpp index 3f426bc..1e56732 100644 --- a/src/author.cpp +++ b/src/author.cpp @@ -4,7 +4,8 @@ // 1. реализуйте конструктор ... Author::Author(const std::string &full_name, int age, Sex sex) { - // валидация аргументов (здесь был Рамиль) + + // валидация аргументов (здесь был Рамиль) if (age < kMinAuthorAge) { throw std::invalid_argument("Author::age must be greater than " + std::to_string(kMinAuthorAge)); } @@ -13,6 +14,9 @@ Author::Author(const std::string &full_name, int age, Sex sex) { throw std::invalid_argument("Author::full_name must not be empty"); } // Tip 1: инициализируйте поля + full_name_ = full_name; + age_ = age; + sex_ = sex; } void Author::SetAge(int age) { diff --git a/src/book.cpp b/src/book.cpp index 24ef599..c508edb 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -2,7 +2,7 @@ #include // invalid_argument -// 1. реализуйте конструктор ... + Book::Book(const std::string &title, const std::string &content, Genre genre, @@ -24,13 +24,22 @@ Book::Book(const std::string &title, } // Tip 1: остались слезы на щеках, осталось лишь инициализировать поля ... + title_ = title; + content_ = content; + genre_ = genre; + publisher_ = publisher; + authors_ = authors; } // 2. реализуйте метод ... bool Book::AddAuthor(const Author &author) { // здесь мог бы быть ваш сногсшибающий код ... // Tip 1: для поиска дубликатов можно использовать цикл for-each - return false; + for(int i : authors_){ + if(i == author) return false; + } + authors_.push_back(author); + return true; } // РЕАЛИЗОВАНО diff --git a/src/book_store.cpp b/src/book_store.cpp index 6f296b4..2b780a3 100644 --- a/src/book_store.cpp +++ b/src/book_store.cpp @@ -8,6 +8,21 @@ ResizeStorageStatus resize_storage(Book *&storage, int size, int new_capacity) { // здесь мог бы быть ваш разносторонний и многогранный код ... // Tip 1: проведите валидацию аргументов функции // Tip 2: не забудьте высвободить ранее выделенную память под хранилище + if(storage == nullptr){ + return ResizeStorageStatus::NULL_STORAGE; + } + if(new_capacity <= size){ + return ResizeStorageStatus::INSUFFICIENT_CAPACITY; + } + if(size < 0){ + return ResizeStorageStatus::NEGATIVE_SIZE; + } + + auto *new_storage = new Book[new_capacity]; + std::copy(storage[0], storage[size - 1], new_storage); + delete [] storage; + storage = new_storage; + storage_capacity_ = new_capacity; return ResizeStorageStatus::SUCCESS; } @@ -19,12 +34,17 @@ BookStore::BookStore(const std::string &name) : name_{name} { } // здесь мог бы быть ваш сотрясающий землю и выделяющий память код ... + name_ = name; + resize_storage(&storage_, storage_size_, kInitStorageCapacity); } // 3. реализуйте деструктор ... BookStore::~BookStore() { // здесь мог бы быть ваш высвобождающий разум от негатива код ... // Tip 1: я свободен ..., словно память в куче: не забудьте обнулить указатель + delete [] storage_; + storage_size_ = 0; + storage_capacity_ = 0; } // 4. реализуйте метод ... @@ -33,8 +53,14 @@ void BookStore::AddBook(const Book &book) { // здесь мог бы быть ваш умопомрачительный код ... // Tip 1: используйте функцию resize_storage_internal, задав новый размер хранилища // Tip 2: не забудьте обработать статус вызова функции + status = resize_storage(&storage_, storage_size_, storage_capacity_ + kInitStorageCapacity); + if(status != ResizeStorageStatus::SUCCESS){ + return; + } } // Tip 3: не забудьте добавить книгу в наше бездонное хранилище ... + storage_[storage_size_] = book; + storage_size_++; } // РЕАЛИЗОВАНО