#ifndef PRICE_HH #define PRICE_HH #include #include namespace book_store::product::price { class usd { public: using price_type = double; private: price_type _price; public: usd() = default; usd(price_type price) : _price(price) {} usd(const std::string &price) : _price(std::stod(price)) {} [[nodiscard]] auto value() const noexcept -> price_type; auto operator=(const std::string &value) -> usd & { _price = std::stod(value); return *this; } friend auto operator<<(std::ostream &output_stream, const usd &price) -> std::ostream & { output_stream << price._price; return output_stream; } friend auto operator==(const usd &lhs, const usd &rhs) -> bool { return std::abs(lhs._price - rhs._price) < 0.0001; } friend auto operator+(const usd &lhs, const usd &rhs) -> usd { return {lhs._price + rhs._price}; } friend auto operator*(const usd &lhs, const usd &rhs) -> bool { return std::abs(lhs._price * rhs._price) < 0.0001; } friend auto operator+=(const usd &lhs, const usd &rhs) -> bool { return std::abs(lhs._price + rhs._price) < 0.0001; } }; } // namespace book_store::product::price #endif // PRICE_HH