Buenas, para la uni tengo que hacer un trabajo de programación modular y tengo una duda sobre como se comportaría las clases en cierto momento.
El problema es que antes debemos de hacer la especificación y la implementación.
Después de hacer la codificación a C++ de la implementación se podría variar, pero sería bastante trabajo cambiar eso si no funciona bien. Por eso realizo esta pregunta para saber si alguien me puede confirmar como se comportaría mi programa al hacer lo siguiente:
LA DUDA:
[Voy a poner otras clases, no las que tengo que usar, así no hará falta explicarlas]
Pongamos que tengo la clase Persona donde tiene algo (vector, pila, cola...) que guarda a sus hijos. Esta clase tiene una función "añadir hijo".
Después tengo una clase Grupo de personas (puede ser un vector de personas, por ejemplo) que es básicamente con la que trabajamos. Esta tiene una función que dado un nombre nos devuelve la persona con ese nombre.
En el programa principal llenamos el "Grupo de personas" de personas y ahora viene lo que me interesa.
Pongamos que ahora querémos añadir un hijo a una persona, como véis tenemos en Grupo de persona una función que busca dentro del vector a una persona y la retorna y las personas tienen la función "añadir hijo".
¿El "hijo que retorna" la función "Grupo de personas" sería una copia o como un puntero al hijo retornado?
Explico más mi duda, si hago ahora:
grupo.consultar("paco"); // Esto devuelve una persona del "Grupo de personas"
persona.añadir_hijo(TAL); // Añade el hijo TAL a persona
Si hago:
grupo.consultar("paco").añadir_hijo(TAL);
o bien (para separarlo un poco más):
Persona c = grupo.consultar("paco");
c.añadir_hijo(TAL);
¿Se modifica el hijo dentro del vector "Grupo de personas"? ¿O se modifica una copia que nos ha devuelto la función "consultar"* y que por lo tanto no tiene repercusión real sobre "Grupo de personas"? (lógicamente lo que quiero es que se actualice la persona que hay en el grupo)
*La función consultar puede ser algo del tipo:
for (int i = 0; i < N; ++i)
if (nombre_persona == vector.nombre) return vector