malcin

Untitled

Jun 11th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <map>
  2. #include <iostream>
  3.  
  4. class Items
  5. {
  6. private:
  7.     static int idCounter()
  8.     {
  9.         static int count = 0;
  10.         return count++;
  11.     }
  12.     static std::map<int, Items *> & idItems()
  13.     {
  14.         static std::map<int, Items *> idItems;
  15.         return idItems;
  16.     }
  17.  
  18.     int id;
  19.     std::string Name;
  20.     int val;
  21.  
  22.     Items() {}
  23.     Items(int id, int value, std::string name)
  24.     {
  25.         this->id = id;
  26.         this->val = value;
  27.         this->Name = name;
  28.         idItems()[id] = this;
  29.     }
  30. public:
  31.     static Items & sword()
  32.     {
  33.         static Items item(idCounter(), 450, "sword");
  34.         return item;
  35.     }
  36.     static Items & meat()
  37.     {
  38.         static Items item(idCounter(), 50, "meat");
  39.         return item;
  40.     }
  41.     static Items & gold()
  42.     {
  43.         static Items item(idCounter(), 1, "gold");
  44.         return item;
  45.     }
  46.  
  47.     Items(int ID)
  48.     {
  49.         *this = *idItems()[ID];
  50.     }
  51.  
  52.     bool operator!=(Items & comp) const
  53.     {
  54.         if (id != comp.id)
  55.             return true;
  56.         return false;
  57.     }
  58.  
  59.     int getID()
  60.     {
  61.         return id;
  62.     }
  63.    
  64.     int value()
  65.     {
  66.         return val;
  67.     }
  68.    
  69.     std::string name()
  70.     {
  71.         return Name;
  72.     }
  73. };
  74.  
  75. int main() {
  76.     Items item = Items::gold();
  77.    
  78.     std::cout << item.name() << " (" << item.getID() << ") value: " << item.value() << "\n";
  79.     std::cout << Items::meat().name() << " (" << Items::meat().getID() << ") value: " << Items::meat().value() << "\n";
  80.     std::cout << Items::meat().name() << " (" << Items::meat().getID() << ") value: " << Items::meat().value() << "\n";
  81.    
  82.     item = Items(1); // OK
  83.     std::cout << item.name() << " (" << item.getID() << ") value: " << item.value() << "\n";
  84.  
  85.     item = Items(2); // ERROR
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment