Initializing objects with overloaded constructors

I have tried literally everything to try to initialize the constructor so that when i create an object and pass the parameters in, it wont give me a crazy negative number, but it's still not working!! To test that it works i used the getHp and attack function. So for example, if i say Hero Hi(100, 200, 300, 400), then i say Hi.getHP(), it should be 100(the first parameter)...BUT ITS NOT! CAN SOMEONE HELP ME PLEASE?!??!?!?!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 //Characters.h
class Characters
{
private:
    int level;
    int hp;
    int attack;
    int defense;
protected:
    Characters(); // zero everything by default
    Characters(int, int, int, int); // populate explicitly
	~Characters();
public:
    int getAttack() const { return attack; }
	int getDefense() const { return defense; }
	int getHp() const { return hp; }
	int getlevel() const { return level; }

	void setAttack(int);
	void setDefense(int);
	void setStrength(int);
	void setHp(int);
	void setlevel(int);
	void damageTaken(int);
};


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//Characters.cpp
Characters::Characters() : level(0), hp(0), attack(0), defense(0) {}
//
//Characters::Characters(int seed)
//{
//    // NB. your code still doesn't initialize hp, strength etc.
//    // it also logs level before initializing it, so that will be garbage
//}

//Characters::Characters(int hit, int lvl, int att, int def)
// : level(lvl), hp(hit), attack(att), defense(def){}

Hero::Hero(int newHp, int newLevel, int newAttack, int newDef)
    : Characters(newHp, newLevel, newAttack, newDef)
{
	cout << "Hero created using Overloaded function!\n";
	HeroHp = newHp;
	cout << "Hp is: "<< HeroHp << endl;
	Herolevel = newLevel;
	cout << "level is: " << Herolevel << endl;
	HeroAttack = newAttack;
	cout << "Attack is: " << HeroAttack << endl;
	HeroDefense = newDef;
	cout << "Defense is: " << HeroDefense << endl;
    // logging goes here
    // note that you don't need HeroLevel etc. at all any more, just use level
}

Monsters::Monsters(int newHp, int newLevel, int newAttack, int newDef)
	: MonsterHp(newHp), Monsterlevel(newLevel), MonsterAttack(newAttack)
, MonsterDefense(newDef)//initialize list
{
	cout << "Monster created using Overloaded function!\n";
	MonsterHp = newHp;
	cout << "Hp is: "<< MonsterHp << endl;
	Monsterlevel = newLevel;
	cout << "level is: " << Monsterlevel << endl;
	MonsterAttack = newAttack;
	cout << "Attack is: " << MonsterAttack << endl;
	MonsterDefense = newDef;
	cout << "Defense is: " << MonsterDefense << endl;
}


Characters::~Characters()
{
	cout << "Character has been destroyed!\n";
}

void Characters::setAttack(int att)
	{
		attack = att;
	}

void Characters::setDefense(int def)
	{
		defense = def;
	}

void Characters::setHp(int health)
	{
		hp = health;
	}

void Characters::damageTaken(int damage)
	{
		hp -= damage;
	}

void Characters::setlevel(int lvl)
	{
		level = lvl;
	}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Monsters.h
class Monsters:
	public Characters //Hero
{
private:
	int Monsterlevel;
	int MonsterHp;
	int MonsterStrength;
	int MonsterAttack;
	int MonsterDefense;
public:
	Monsters(int, int, int, int); //explicit
	~Monsters();
};


1
2
3
4
5
6
//Monsters.cpp
Monsters::~Monsters()
{
	cout << "\nMonster Destroyed";
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Hero.h
class Hero:
	public Characters
{
private:
	int Herolevel;
    int HeroHp;
	int HeroStrength;
	int HeroAttack;
	int HeroDefense;

public:
	//Hero();
	Hero(int, int, int, int);
	~Hero();

};


1
2
3
4
5
//Hero.cpp
Hero::~Hero()
{
	cout << "Hero destroyed!\n";
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//main.cpp
int main()
{
	Hero Me(100,20,30,40);//Created using overloaded constructor
	Monsters m(100,16,18,20);//creates a monster object and uses overloaded constructor
 to initialize
	cout << "\ntest1\n";
	Me.getHp();//expecting 100
	Me.getAttack();//expecting w.e is in parameters

	m.getHp();//expecting 100
	m.getAttack();//same as hero


	cin.sync();
	cin.get();
	return 0;
}

First of all I do not see the definition of constructor

Characters( int, int, int, int )

As for class Monsters then you should call constructor Characters( int, int, int, int )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Where is Characters( int, int, int, int ) called?

Monsters::Monsters(int newHp, int newLevel, int newAttack, int newDef)
	: MonsterHp(newHp), Monsterlevel(newLevel), MonsterAttack(newAttack)
, MonsterDefense(newDef)//initialize list
{
	cout << "Monster created using Overloaded function!\n";
	MonsterHp = newHp;
	cout << "Hp is: "<< MonsterHp << endl;
	Monsterlevel = newLevel;
	cout << "level is: " << Monsterlevel << endl;
	MonsterAttack = newAttack;
	cout << "Attack is: " << MonsterAttack << endl;
	MonsterDefense = newDef;
	cout << "Defense is: " << MonsterDefense << endl;
}
Last edited on
i have to call the Characters constructor for my monster? How would i do this?
Topic archived. No new replies allowed.