61. C++ || Estructuras anidadas
Recordemos que dentro de una estructura podemos declarar cualquier tipo de dato como miembro, incluso un tipo de dato hecho por el usuario con una estructura o clase. Ahora veremos cómo hacer eso y por qué.
En ocasiones veremos que habrĆ” cierta similitud entre muchas cosas, por ejemplo, si quisiĆ©ramos hacer una estructura para registrar los datos de un cliente por cada compra en un sĆŗper mercado, es normal pensar que vamos a necesitar un programa que lea su nombre, apellido, edad, nĆŗmero de identificación y nĆŗmero de telĆ©fono, ahora, piensen en que si queremos hacer una estructura para almacenar lo datos de una persona que se quiera inscribir en un centro educativo, pedirĆamos lo mismo.
Las estructuras anidadas tienen mĆ”s sentido si tomamos como ejemplo, que para inscribir a una persona en ese centro educativo, ademĆ”s de pedir los datos que necesitarĆamos para cualquier compra en el sĆŗper mercado, tambiĆ©n necesitamos la fecha de nacimiento de la persona. Con esto, es necesario ingresar otro miembro a la estructura. ¿Cómo lo harĆamos? ¿CrearĆamos dos tipos de estructuras? Por ejemplo:
struct Cliente{ char nombre[20], apellido[20]; int edad, numeroIdentificacion; long telefono; }; struct Registro{ char nombre[20], apellido[20]; int edad, numeroIdentificacion; long telefono; int dia,mes,anio; //Fecha de nacimiento de la persona };
¡Por supuesto que no! Esto sólo traerĆa consigo la ineficiencia pura.
ExplicarƩ esto sin entrar en muchos detalles, y terminarƩ mostrando un ejemplo completo para que se pueda entender de la mejor manera.
PudiƩsemos reescribir la estructura para que sea mƔs fƔcil trabajar con ella, ademƔs de anidarla.
//Lo que antes era la estructura Cliente, //Ahora se llama Persona. struct Persona{ char nombre[20], apellido[20]; int edad, numeroIdentificacion; long telefono; }; //Una estructura para representar la //Fecha de nacimiento de una persona. struct Fecha{ int dia,mes,anio; }; //Esta estructura representa el registro //De una persona a una centro educativo. //¡Dentro de ella estĆ”n todos lo campos //Solicitados! struct Registro{ //Dos tipos de datos estructura, esto es //La anidación Persona persona; Fecha fec; };
Ahora hemos anidado la estructura, es decir, hemos introducido un tipo de dato estructura en los miembros de otra estructura. Ahora la estructura Registro contiene todos los campos para leer el nombre, apellido, edad, número de teléfono, número de identificación y la fecha de nacimiento de cualquier persona que se quiera registrar en el centro educativo.
Las ventajas que trae esto es que sólo hemos de necesitar declarar la estructura una sola vez. Y si otra estructura necesita algunos campos parecidos a la ya declarada, entonces se agrega como miembro de la nueva estructura. FaltarĆa ver cómo acceder a esos miembros de la estructura anidada. Pero a simples definiciones, se hace igual que como hemos estado haciendo hasta ahora:
- Por medio del operador punto (.).
- Por medio del operador puntero (->) en caso de que se trate de un puntero a una estructura.
Ejemplo de una estructura anidada en C++
#include <iostream> using namespace std; //Lo que antes era la estructura Cliente, //Ahora se llama Persona. struct Persona{ char nombre[20], apellido[20]; int edad, numeroIdentificacion; long telefono; }; //Una estructura para representar la //Fecha de nacimiento de una persona. struct Fecha{ int dia,mes,anio; }; //Esta estructura representa el registro //De una persona a una centro educativo. //¡Dentro de ella estĆ”n todos lo campos //Solicitados! struct Registro{ Persona persona; Fecha fec; }; int main(){ Registro nuevoIngreso; cout << "Ingrese el nombre" << endl; cin.getline(nuevoIngreso.persona.nombre,20); cout << "Ingrese apellido" << endl; cin.getline(nuevoIngreso.persona.apellido,20); cout << "Ingrese edad" << endl; cin >> nuevoIngreso.persona.edad; cout << "Ingrese numero de identificacion" << endl; cin >> nuevoIngreso.persona.numeroIdentificacion; cout << "Ingrese telefono" << endl; cin >> nuevoIngreso.persona.telefono; cout << "Ingrese dia de nacimiento" << endl; cin >> nuevoIngreso.fec.dia; cout << "Ingrese mes de nacimiento" << endl; cin >> nuevoIngreso.fec.mes; cout << "Ingrese anio de nacimiento" << endl; cin >> nuevoIngreso.fec.anio; system("cls"); //Borra la pantalla. cout << "Nombre: " << nuevoIngreso.persona.nombre; cout << "\nApellido: " << nuevoIngreso.persona.apellido; cout << "\nEdad: " << nuevoIngreso.persona.edad; cout << "\nNumero de identificacion: " << nuevoIngreso.persona.numeroIdentificacion; cout << "\nTelefono: " << nuevoIngreso.persona.telefono; cout << "\nDia de nacimiento: " << nuevoIngreso.fec.dia; cout << "\nMes de nacimiento: " << nuevoIngreso.fec.mes; cout << "\nAnio de nacimiento: " << nuevoIngreso.fec.anio; cout << endl << endl << endl; return 0; }
El acceso a miembros dato de estructuras anidadas requiere del uso de mĆŗltiples operadores punto. Esto hasta llegar al dato miembro al que se desea acceder.
Publica un comentario