Hi, i have created a base class to create 4 similar classes, and since i am new to class design when is comes to stuff like polymorphism and inheritance. Can you guys give me pointers to make this class better and/or more friendly for storing the data so the items can be read back at a later time during game play?

here's the header file containing the class:
Code:
#ifndef ITEMS_H
#define ITEMS_H

enum ITEM_TYPE{
	ITEM_DEFAULT,
	WEAPON_SWORD,
	WEAPON_SWORD_SHIELD,
	WEAPON_LONG_SWORD,
	WEAPON_DBL_SWORD,
	WEAPON_AXE,
	WEAPON_AXE_SHIELD,
	WEAPON_DBL_AXE,
	WEAPON_HAMMER,
	WEAPON_HAMMMER_SHIELD,
	WEAPON_SHORT_BALDE,
	WEAPON_DBL_SHORT_BLADE,
	WEAPON_BOW,
	WEAPON_CROSSBOW,
	ARMOR_HEAD,
	ARMOR_TORSO,
	ARMOR_ARMS,
	ARMOR_HANDS,
	ARMOR_LEGS,
	ARMOR_BOOTS,
	EMBLEM_EARTH,
	EMBLEM_FIRE,
	EMBLEM_WATER,
	EMBLEM_WIND,
	EMBLEM_DARK,
	EMBLEM_LIGHT,
	EMBLEM_THUNDER,
	POWERUP_HP_UP,
	POWERUP_ATT_UP,
	POWERUP_DEF_UP,
	POWERUP_SPC_UP,
	POWERUP_SPD_UP,
	POWERUP_ACC_UP,
	POWERUP_RAGE,
	POWERUP_FOCUS,
	POWERUP_ADRENIL
};

enum EFFECT_TYPE{
	EFFECT_NONE,
	EFFECT_RAGE,
	EFFECT_COUNTER,
	EFFECT_DBL_STRIKE,
	EFFECT_POISON,
	EFFECT_SUICIDE,
	EFFECT_HYPER
};

class Items{
public:
	virtual void setCost(int cost) = 0;
	virtual void setLevel(int lev) = 0;
	virtual void setStats(int att, int def, int spec, int spd, int acc) = 0;
	virtual void setType(ITEM_TYPE typ) = 0;
	virtual void setName(char* nam) = 0;
	virtual void setEffect(EFFECT_TYPE eff) = 0;

	virtual int getCost() = 0;
	virtual void getStats(int statarray[5]) = 0;  
	virtual int getLevel() = 0;
	virtual ITEM_TYPE getType() = 0;
	virtual char* getName() = 0;
	virtual EFFECT_TYPE getEffect() = 0;
};




class Weapon : public Items{
	int price;
	int level;
	int attack;
	int defense;
	int special;
	int speed;
	int accuracy;
	ITEM_TYPE type;
	char* name;
	EFFECT_TYPE effect;
public:
	Weapon() : price(0), level(0), attack(0), defense(0), special(0),
		speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
	~Weapon() {}

	void setCost(int cost){
		price = cost;
	}

	void setLevel(int lev){
		level = lev;
	}

	void setStats(int att, int def, int spec, int spd, int acc){
		attack = att;
		defense = def;
		special = spec;
		speed = spd;
		accuracy = acc;
	}

	void setType(ITEM_TYPE typ){
		type = typ;
	}

	void setName(char* nam){
		name = nam;
	}

	void setEffect(EFFECT_TYPE eff)
	{
		effect = eff;
	}

	int getCost(){
		return price;
	}

	void getStats(int statarray[5]){
		statarray[0] = attack;
		statarray[1]= defense;
		statarray[2] = special;
		statarray[3] = speed;
		statarray[4] = accuracy;
	}

	int getLevel(){
		return level;
	}

	ITEM_TYPE getType(){
		return type;
	}

	char* getName(){
		return name;
	}

	EFFECT_TYPE getEffect(){
		return effect;
	}
};



class Armor : public Items{
	int price;
	int level;
	int attack;
	int defense;
	int special;
	int speed;
	int accuracy;
	ITEM_TYPE type;
	char* name;
	EFFECT_TYPE effect;
public:
	Armor() : price(0), level(0), attack(0), defense(0), special(0),
		speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
	~Armor() {}

	void setCost(int cost){
		price = cost;
	}

	void setLevel(int lev){
		level = lev;
	}

	void setStats(int att, int def, int spec, int spd, int acc){
		attack = att;
		defense = def;
		special = spec;
		speed = spd;
		accuracy = acc;
	}

	void setType(ITEM_TYPE typ){
		type = typ;
	}

	void setChar(char* nam){
		name = nam;
	}
	void setEffect(EFFECT_TYPE eff){
		effect = eff;
	}


	int getCost(){
		return price;
	}

	void getStats(int statarray[5]){
		statarray[0] = attack;
		statarray[1]= defense;
		statarray[2] = special;
		statarray[3] = speed;
		statarray[4] = accuracy;
	}

	int getLevel(){
		return level;
	}

	ITEM_TYPE getType(){
		return type;
	}

	char* getName(){
		return name;
	}

	EFFECT_TYPE getEffect(){
		return effect;
	}
};



class Emblem : public Items{
	int price;
	int level;
	int attack;
	int defense;
	int special;
	int speed;
	int accuracy;
	ITEM_TYPE type;
	char* name;
	EFFECT_TYPE effect;
public:
	Emblem() : price(0), level(0), attack(0), defense(0), special(0),
		speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
	~Emblem() {}

	void setCost(int cost){
		price = cost;
	}

	void setLevel(int lev){
		level = lev;
	}

	void setStats(int att, int def, int spec, int spd, int acc){
		attack = att;
		defense = def;
		special = spec;
		speed = spd;
		accuracy = acc;
	}

	void setType(ITEM_TYPE typ){
		type = typ;
	}

	void setChar(char* nam){
		name = nam;
	}

	void setEffect(EFFECT_TYPE eff){
		effect = eff;
	}

	int getCost(){
		return price;
	}

	void getStats(int statarray[5]){
		statarray[0] = attack;
		statarray[1]= defense;
		statarray[2] = special;
		statarray[3] = speed;
		statarray[4] = accuracy;
	}

	int getLevel(){
		return level;
	}

	ITEM_TYPE getType(){
		return type;
	}

	char* getName(){
		return name;
	}

	EFFECT_TYPE getEffect(){
		return effect;
	}
};




class PowerUp : public Items{
	int price;
	int level;
	int attack;
	int defense;
	int special;
	int speed;
	int accuracy;
	ITEM_TYPE type;
	char* name;
	EFFECT_TYPE effect;
public:
	PowerUp() : price(0), level(0), attack(0), defense(0), special(0),
		speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
	~PowerUp() {}

	void setCost(int cost){
		price = cost;
	}

	void setLevel(int lev){
		level = lev;
	}

	void setStats(int att, int def, int spec, int spd, int acc){
		attack = att;
		defense = def;
		special = spec;
		speed = spd;
		accuracy = acc;
	}

	void setType(ITEM_TYPE typ){
		type = typ;
	}

	void setChar(char* nam){
		name = nam;
	}

	void setEffect(EFFECT_TYPE eff){
		effect = eff;
	}

	int getCost(){
		return price;
	}

	void getStats(int statarray[5]){
		statarray[0] = attack;
		statarray[1]= defense;
		statarray[2] = special;
		statarray[3] = speed;
		statarray[4] = accuracy;
	}

	int getLevel(){
		return level;
	}

	ITEM_TYPE getType(){
		return type;
	}

	char* getName(){
		return name;
	}

	EFFECT_TYPE getEffect(){
		return effect;
	}
};
#endif // ITEMS_H
also, do you know any good file i/o tutorials or methods i can use to format a text file easily, especially when reading a file containing large amounts of data?