From 564cc1b765e982cdc8e71d1ed465dffa5bab2bc2 Mon Sep 17 00:00:00 2001 From: studiosi Date: Sat, 15 Aug 2026 17:43:30 +0300 Subject: [PATCH] Solved: 20 - Classes and Objects --- .../include/classes_and_objects.hpp | 4 ++-- .../06_oop_basics/src/classes_and_objects.cpp | 17 ++++++++++------- .../test/classes_and_objects_test.cpp | 2 ++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/modules/06_oop_basics/include/classes_and_objects.hpp b/modules/06_oop_basics/include/classes_and_objects.hpp index 6a962ca..3c1769b 100644 --- a/modules/06_oop_basics/include/classes_and_objects.hpp +++ b/modules/06_oop_basics/include/classes_and_objects.hpp @@ -11,8 +11,8 @@ public: [[nodiscard]] auto owner() const -> const std::string&; [[nodiscard]] auto balance() const -> double; - void deposit(double amount); - auto withdraw(double amount) -> bool; + void deposit(double amount) pre(amount > 0); + auto withdraw(double amount) -> bool pre(amount > 0); private: std::string owner_; diff --git a/modules/06_oop_basics/src/classes_and_objects.cpp b/modules/06_oop_basics/src/classes_and_objects.cpp index 18e3da1..80f0f41 100644 --- a/modules/06_oop_basics/src/classes_and_objects.cpp +++ b/modules/06_oop_basics/src/classes_and_objects.cpp @@ -2,20 +2,23 @@ namespace oop { -BankAccount::BankAccount(std::string owner, double balance) +BankAccount::BankAccount(std::string owner, const double balance) : owner_(std::move(owner)), balance_(balance) {} auto BankAccount::owner() const -> const std::string& { return owner_; } auto BankAccount::balance() const -> double { return balance_; } -void BankAccount::deposit(double amount) { - // TODO: Add amount when positive - (void)amount; +void BankAccount::deposit(const double amount) +{ + this->balance_ += amount; } -auto BankAccount::withdraw(double amount) -> bool { - // TODO: Return false if insufficient funds, else subtract and return true - (void)amount; +auto BankAccount::withdraw(const double amount) -> bool +{ + if (this->balance_ >= amount) { + this->balance_ -= amount; + return true; + } return false; } diff --git a/modules/06_oop_basics/test/classes_and_objects_test.cpp b/modules/06_oop_basics/test/classes_and_objects_test.cpp index cd1d28c..fe82686 100644 --- a/modules/06_oop_basics/test/classes_and_objects_test.cpp +++ b/modules/06_oop_basics/test/classes_and_objects_test.cpp @@ -8,6 +8,8 @@ TEST(ClassesAndObjects, DepositAndWithdraw) { EXPECT_TRUE(account.withdraw(30.0)); EXPECT_DOUBLE_EQ(account.balance(), 120.0); EXPECT_FALSE(account.withdraw(1000.0)); + EXPECT_DEATH(account.withdraw(-10.0), "amount > 0"); + EXPECT_DEATH(account.deposit(-10.0), "amount > 0"); } TEST(ClassesAndObjects, OwnerName) {