I made the following code as practice with classes and objects. However, when I try to modify the value of int hp inside the takedam function, it doesn't change anything outside the function. What is the best/most efficient way to change this value? I'm willing to read up on stuff, so if you point me in the right direction I'll try to figure it out.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

class zergling
{
	char name[20];
	int hp;
	int basedamage;
	public:
	zergling(int starthp, int dmg, char *label); //constructor declaration
	~zergling() {}; //destructor declaration and definition.
	
	int attack(int damage, zergling target);
	int takedam(int dam);
};

zergling::zergling(int starthp, int basedmg, char *label) //definition of the constructor.
{
	strcpy(name,label);
	hp=starthp;
	basedamage=basedmg;
}

int zergling::attack(int damage, zergling target)
{
	int dmgtot=rand()%3+target.basedamage;
	printf("\nabout to inflict %d damage on a zergling, named %s\n",dmgtot,target.name);
	target.takedam(dmgtot);
}

int zergling::takedam(int dam)
{
	hp-=dam;
	printf("\na zergling named %s has taken %d dam, and now has %d hp left.\n",name,dam,hp);
}


int main()
{
	srand(time(NULL)); //starting the RNG base.
	printf("\nThis is a game of chance.\n");
	char name1[20];
	char name2[20];
	printf("Enter the name of player 1: ");
	scanf("%s",name1);
	printf("Enter the name of player 2: ");
	scanf("%s",name2);
	
	zergling z1(35,5,name1);
	zergling z2(35,5,name2);
	
	printf("\nLet the battle begin!\n\n");
	
	while (1)
	{
	z1.attack(3,z2);
	sleep(1);
	//z2.attack(3,z1);
	//sleep(1);
	}
	
}