#include <iostream>
#include<iomanip>
using namespace std;
class Knight {
public:
int _hp=0;
};
class Item {
public:
Item() {
cout << "Item()" << endl;
}
Item(int itemType) : _itemType(itemType) {
}
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 = 0,
IT_ARMOR = 1,
};
class Weapon :public Item {
public:
Weapon() : Item(IT_WEAPON){
cout << "Weapon()" << endl;
_damage = rand() % 100;
}
~Weapon() {
cout << "~Weapon()" << endl;
}
public:
int _damage;
};
class Armor :public Item {
public:
Armor() : Item(IT_ARMOR) {
cout << "Armor()" << endl;
_defence = rand() % 100;
}
~Armor() {
cout << "~Armor()" << endl;
}
public:
int _defence;
};
void TestItem(Item item) {
}
void TestItemPtr(Item* item) {
}
int main()
{
{
Knight* knight = new Knight();
}
{
Weapon* weapon = new Weapon();
Item* item = weapon;
delete weapon;
}
{
Item* item = new Item();
delete item;
}
srand((unsigned int)time(nullptr));
Item* inventory[20] = {};
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*)inventory[i];
cout << "Weapon Damage is "<<weapon->_damage << endl;
delete(item);
}
}
return 0;
}