// PASO DE PUNTEROS POR REFERENCIA // =============================== // Este ejemplo ilustra que la diferencia entre pasar un puntero a una // funcion por valor o por referencia es la misma que hay entre pasar // un entero por valor o por referencia (esa se estudia en primer // curso). // Los punteros, igual que los enteros, los pasamos por referencia a // una funcion cuando queremos que la funcion los pueda modificar // y la modificacion afecte al puntero original, no a una copia. #include #include using namespace std; class Jugador { string nombre; int edad; public: Jugador(const string & elNombre, int laEdad) : nombre{elNombre}, edad{laEdad} { } void mostrar() { cout << "(" << nombre << " : " << edad << ")" << endl; } }; void modificaEnteroPorValor(int enteroValor) { enteroValor = 22; } void modificaEnteroPorReferencia(int & enteroReferencia) { enteroReferencia = 33; } void modificaPunteroPorValor(Jugador * punteroValor) { punteroValor = new Jugador("Luis", 55); } void modificaPunteroPorReferencia(Jugador * & punteroReferencia) { punteroReferencia = new Jugador("Ana", 66); } int main () { // ¿Que diferencia hay entre pasar un entero por valor o por referencia? Recuerdala: int unEntero = 11; cout << unEntero << endl; modificaEnteroPorValor(unEntero); cout << unEntero << endl; modificaEnteroPorReferencia(unEntero); cout << unEntero << endl; // ¿Que diferencia hay entre pasar un puntero por valor o por referencia? La misma: Jugador * unPuntero = new Jugador("Pedro", 44); unPuntero->mostrar(); modificaPunteroPorValor(unPuntero); unPuntero->mostrar(); modificaPunteroPorReferencia(unPuntero); unPuntero->mostrar(); }