C + + En cuanto al valor de retorno por referencia...

  • admod
  • Newbie
  • Newbie
  • No Avatar
  • Registrado: Dic 07, 2010
  • Mensajes: 8
  • Status: Offline

Nota Enero 3rd, 2011, 6:50 pm

Hola amigos,
Soy novato en C + + Desarrollo. Vi un código en un libro llamado "A partir de C + + programación de juegos". Tengo una duda con respecto a la raíz de Trabajo Código.

CPP Código: [ Select ]
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
//returns a reference to a string
string& refToElement(vector<string>& vec, int i);
 
 
int main()
{
    vector<string> inventory;
    inventory.push_back("sword");
    inventory.push_back("armor");
    inventory.push_back("shield");
 
    //displays string that the returned reference refers to
    cout << "Sending the returned reference to cout:\n";
    cout << refToElement(inventory, 0) << "\n\n";
 
    //assigns one reference to another-inexpensive assignment
    cout << "Assigning the returned reference to another reference.\n";
    string& rStr = refToElement(inventory, 1);
    cout << "Sending the new reference to cout:\n";
    cout << rStr << "\n\n";
 
    //copies a string object-expensive assignment
    cout << "Assigning the returned reference to a string object.\n";
    string str = refToElement(inventory, 2);
    cout << "Sending the new string object to cout:\n";
    cout << str << "\n\n";
 
    //altering the string object through a returned reference
    cout << "Altering an object through a returned reference.\n";
    rStr = "Healing Potion";
    cout << "Sending the altered object to cout:\n";
    cout << inventory[1] << endl;
 
    return 0;
}
 
//returns a reference to a string
string& refToElement(vector<string>& vec, int i)
{
    return vec[i];
}
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. //returns a reference to a string
  8. string& refToElement(vector<string>& vec, int i);
  9.  
  10.  
  11. int main()
  12. {
  13.     vector<string> inventory;
  14.     inventory.push_back("sword");
  15.     inventory.push_back("armor");
  16.     inventory.push_back("shield");
  17.  
  18.     //displays string that the returned reference refers to
  19.     cout << "Sending the returned reference to cout:\n";
  20.     cout << refToElement(inventory, 0) << "\n\n";
  21.  
  22.     //assigns one reference to another-inexpensive assignment
  23.     cout << "Assigning the returned reference to another reference.\n";
  24.     string& rStr = refToElement(inventory, 1);
  25.     cout << "Sending the new reference to cout:\n";
  26.     cout << rStr << "\n\n";
  27.  
  28.     //copies a string object-expensive assignment
  29.     cout << "Assigning the returned reference to a string object.\n";
  30.     string str = refToElement(inventory, 2);
  31.     cout << "Sending the new string object to cout:\n";
  32.     cout << str << "\n\n";
  33.  
  34.     //altering the string object through a returned reference
  35.     cout << "Altering an object through a returned reference.\n";
  36.     rStr = "Healing Potion";
  37.     cout << "Sending the altered object to cout:\n";
  38.     cout << inventory[1] << endl;
  39.  
  40.     return 0;
  41. }
  42.  
  43. //returns a reference to a string
  44. string& refToElement(vector<string>& vec, int i)
  45. {
  46.     return vec[i];
  47. }


su producción tiene como:

Quote:
El envío de la referencia devuelta a la corte:
espada

La asignación de la referencia devuelta a otro de referencia.
El envío de la nueva referencia a la corte:
armadura

La asignación de la referencia devuelta a un objeto cadena.
El envío del nuevo objeto de cadena a los tribunales:
escudo

La alteración de un objeto a través de una referencia devuelta.
El envío del objeto alterado a la corte:
Poción de sanación


en que no entiendo ¿Cómo obtener la última línea de salida, es decir,


Quote:
La alteración de un objeto a través de una referencia devuelta.
El envío del objeto alterado a la corte:
Poción de sanación



¿Alguno se puede explicar esto. Estoy esperando su respuesta.

Agradecidamente
Anes PA
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Enero 3rd, 2011, 6:50 pm

  • Satwant
  • Graduate
  • Graduate
  • Avatar de Usuario
  • Registrado: Dic 27, 2010
  • Mensajes: 126
  • Loc: Bangalore
  • Status: Offline

Nota Enero 21st, 2011, 12:02 am

admod escribió:
Hola amigos,

en que no entiendo ¿Cómo obtener la última línea de salida, es decir,


Quote:
La alteración de un objeto a través de una referencia devuelta.
El envío del objeto alterado a la corte:
Poción de sanación



¿Alguno se puede explicar esto. Estoy esperando su respuesta.


El código es perfecto y muy bien. Aquí está la explicación.

Mira cada dato (variable) representa una ubicación de memoria (normalmente en la memoria principal. )
en esta línea
Código: [ Select ]
string& rStr = refToElement(inventory, 1);

"RSTR" se le pide que guarde la dirección de la ubicación de memoria donde inventario [1] se almacena. La función "refToElement" lugar de memoria no devuelve el valor real almacenado en la ubicación.

Debido a este código
RSTR e inventario [1] señala misma ubicación de memoria. Así que si se realiza cualquier cambio a cualquiera de ellos, es representado por otros. Su justo como una habitación con dos puertas.

lo
Código: [ Select ]
rStr = "Healing Potion";
  cout << "Sending the altered object to cout:\n";
  cout << inventory[1] << endl;
  1. rStr = "Healing Potion";
  2.   cout << "Sending the altered object to cout:\n";
  3.   cout << inventory[1] << endl;


cambio a la "RSTR" está representado por "inventory1"
  • admod
  • Newbie
  • Newbie
  • No Avatar
  • Registrado: Dic 07, 2010
  • Mensajes: 8
  • Status: Offline

Nota Enero 22nd, 2011, 10:19 pm

Hola Satwant,

Gracias por su respuesta buena. Tengo la idea, y lo que debo hacer pendientes en mi C + + estudio. Así que el plan
para reiniciar el mismo en este mismo fin de semana. Esperando su ayuda más y doy mi cordial saludo
a mi gurú.

Por suerte,
Anes PA
  • Satwant
  • Graduate
  • Graduate
  • Avatar de Usuario
  • Registrado: Dic 27, 2010
  • Mensajes: 126
  • Loc: Bangalore
  • Status: Offline

Nota Enero 23rd, 2011, 12:32 am

Usted Bienvenido :)

Publicar Información

  • Total de mensajes en este tema: 4 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 204 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC