Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <map>
- #include <iostream>
- class Items
- {
- private:
- static int idCounter()
- {
- static int count = 0;
- return count++;
- }
- static std::map<int, Items *> & idItems()
- {
- static std::map<int, Items *> idItems;
- return idItems;
- }
- int id;
- std::string Name;
- int val;
- Items() {}
- Items(int id, int value, std::string name)
- {
- this->id = id;
- this->val = value;
- this->Name = name;
- idItems()[id] = this;
- }
- public:
- static Items & sword()
- {
- static Items item(idCounter(), 450, "sword");
- return item;
- }
- static Items & meat()
- {
- static Items item(idCounter(), 50, "meat");
- return item;
- }
- static Items & gold()
- {
- static Items item(idCounter(), 1, "gold");
- return item;
- }
- Items(int ID)
- {
- *this = *idItems()[ID];
- }
- bool operator!=(Items & comp) const
- {
- if (id != comp.id)
- return true;
- return false;
- }
- int getID()
- {
- return id;
- }
- int value()
- {
- return val;
- }
- std::string name()
- {
- return Name;
- }
- };
- int main() {
- Items item = Items::gold();
- std::cout << item.name() << " (" << item.getID() << ") value: " << item.value() << "\n";
- std::cout << Items::meat().name() << " (" << Items::meat().getID() << ") value: " << Items::meat().value() << "\n";
- std::cout << Items::meat().name() << " (" << Items::meat().getID() << ") value: " << Items::meat().value() << "\n";
- item = Items(1); // OK
- std::cout << item.name() << " (" << item.getID() << ") value: " << item.value() << "\n";
- item = Items(2); // ERROR
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment