#include <iostream>
using namespace std;
class Knight
{
public:
int _hp = 0;
};
class Item
{
public:
Item()
{
cout << "Item" << endl;
}
Item(int itemType) : _itemType(itemType)
{
cout << "Item(int itemType)" << endl;
}
Item(const Item& item)
{
cout << "Item(const Item&)" << endl;
}
virtual ~Item()
{
cout << "~Item()" << endl;
}
public:
int _itemType = 0;
int _itemDbID = 0;
char _dummy[4096] = {};
};
enum ItemType
{
IT_WEAPON = 1,
IT_ARMOR = 2,
};
class Weapon : public Item
{
public:
Weapon() : Item(IT_WEAPON)
{
cout << "Weapon()" << endl;
_damage = rand() % 100;
}
~Weapon()
{
cout << "~Weapon()" << endl;
}
public:
int _damage = 0;
};
class Armor : public Item
{
public:
Armor() : Item(IT_ARMOR)
{
cout << "Armor()" << endl;
}
~Armor()
{
cout << "~Armor()" << endl;
}
public:
int _defence = 0;
};
void TestItem(Item item)
{
}
void TestItemPtr(Item* item)
{
}
int main()
{
{
Knight* knight = new Knight();
delete knight;
}
{
Item* item = new Item();
delete item;
}
{
Weapon* weapon = new Weapon();
Item* item = weapon;
delete weapon;
}
Item* inventory[20] = {};
srand((unsigned int)time(nullptr));
for (int i = 0; i < 20; i++)
{
int randValue = rand() % 2;
switch (randValue)
{
case 0:
inventory[i] = new Weapon();
break;
case 1:
inventory[i] = new Armor();
break;
default:
break;
}
}
for (int i = 0; i < 20; i++)
{
Item* item = inventory[i];
if (item == nullptr)
continue;
if (item->_itemType == IT_WEAPON)
{
Weapon* weapon = (Weapon*)item;
cout << "Weapon Damage : " << weapon->_damage << endl;
}
}
for (int i = 0; i < 20; i++)
{
Item* item = inventory[i];
if (item == nullptr)
continue;
delete item;
}
return 0;
}