Q:

How to redeclare already created object values in C++

I have an assignment to create a small game
Build a Text Adventure Game which takes user input and performs certain actions. 
// At the start of the game the user is given the choice to choose a type of player (1, 2, 3)
// Each type of player starts with below attributes -  
// Player 1 - max health = 50, damage = 10, heal = 20
// Player 2 - max health = 75, damage = 25, heal = 10
// Player 3 - max health = 100, damage = 75, heal = 20
problem is when I try to redeclare the object it doesnt change
Player player(0,0,0);
int player_no;
bool gameover=false;

 std::cout<<"choose your player !!!";
 std::cin>>player_no;
 if(player_no==1){
   Player player1(50,20,10); //value is not reflected inside while
   std::cout<<player.heal;  //50
   std::cout<<player.health; //20
   goto start;
 }else if(player_no==2){
   Player player(75,10,25);  //value is not reflcted inside while
   goto start;
 }

 char command;
  start:
 while(!gameover){
   std::cout<<"what do you want ??? ";
   std::cin>>command;
   if(command=='D'){
     std::cout<<player.health<<"\n";  //uses the default value 0
      std::cout<<player.damage<<"\n";  //uses the default value 0
     player.TakeDamage(player.damage);  //0 is passed
   }else if(command=='H') {
       player.Heal(player.heal);         // 0 is passed
   } 

How to pass the changed value inside the while ???  

A:

Tiny example to illustrate your problem:
    int a = 2;
    if (a == 2)
    {
        std::cout << "a is " << a << std::endl;
        int a = 3;
        std::cout << "a set to " << a << std::endl;
    }
    std::cout << "a is " << a << std::endl;

This prints:
a is 2
a set to 3
a is 2

Why is a not 3 in the second line? That is because the braces { ... } declare a new scope and the line int a = 3 declares a new a variable that is local to that scope only. The second we leave the if-scope the second a variable dies, and we are left with only the original which still is set to 2.
If we change it to:
    int a = 2;
    if (a == 2)
    {
        std::cout << "a is " << a << std::endl;
        a = 3;
        std::cout << "a set to " << a << std::endl;
    }
    std::cout << "a is " << a << std::endl;

Then no new a is declared, and the assignment refers to the variable in the outer scope. Now the output is:
a is 2
a set to 3
a is 3

The fix to your code is to do something like this:
Player player(0, 0, 0);
...
if (player_no == 1) {
    player = Player(50, 20, 10);
    ...
}

