#ifndef ACCOUNT_HPP #define ACCOUNT_HPP #include #include #include namespace bank { class Account { public: explicit Account(std::string owner) : Account(owner, 0l) {} explicit Account(std::string owner, uint32_t deposit); void deposit(uint32_t amount); virtual uint32_t withdraw(uint32_t amount); int64_t balance() const { return balance_; } unsigned long number() const { return number_; } std::string owner() const { return owner_; } private: int64_t balance_ = 0; std::string owner_; unsigned long number_; static unsigned long next_number_; }; std::ostream& operator<<(std::ostream& out, const Account& a); class ChildAccount : public Account { public: ChildAccount(std::string owner) : Account(owner) {} ChildAccount(std::string owner, uint32_t deposit) : Account(owner, deposit) {} uint32_t withdraw(uint32_t amount) override; }; } // namespace bank #endif // ACCOUNT_HPP