friend
, friend class
, std::string
, std::vector<T>
Предефинирайте операторите <<
и >>
за std::ostream
и std::istream
респективно, така че да работят и за класа String
, който написахме предния път и така че да имитират дефиницията на std::string
.
Напишете клас WebStore
, който да моделира склад на онлайн магазин. Класът управялва и пази информация за колекцията от продукти, както и за оборота.
За продуктите използвайте клас Product
(ако не сте го написали, напишете си го, за да си упражните голямата четворка, иначе за тази задача може да ползвате и моите файлове: .hpp и .cpp. Също така пък ако искате можете и да го пренапишете чрез std::string
вместо char*
. В този случай ще пишете ли голяма 4-ка?).
За да бъде използван от сайта на уеб магазинът, класът WebStore
трябва да има следните публични методи:
bool addProduct(const Product&)
: добавя продукта към инвентара само ако вече не съществува друг такъв със същото име. Връща дали е бил добавен продукта.bool removeProduct(const std::string& name)
: премахва продуктът, който има имеname
, ако съществува. Връща дали е бил премахнат даден продукт.double getPriceOf(const std::string& name) const
: връща цената на продукта с имеname
.0
, ако няма такъв.unsigned int getAmount(const std::string& name) const
: връща наличността на продукта с имеname
.0
, ако няма такъв.bool addOneOf(const std::string& name)
: увеличава наличността на продукт с имеname
с единица, ако съществува такъв. Връща дали е добавило наличност (т.е. дали такъв продукт съществува).bool sellOneOf(const std::string& name)
: понижава наличността продукт с имеname
с единица и добавя неговата цена към оборота на магазина, но само ако продуктът е наличен (т.е.amount > 0
) и съществува в инвентара. Връща дали успешно е бил продаден продукт.double getProfit() const
: връща натрупания оборот на магазина.