Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
curso-cpp:struct [2017/03/21 20:36] santo creado |
curso-cpp:struct [2017/10/29 19:20] (actual) santo |
||
---|---|---|---|
Línea 21: | Línea 21: | ||
¿Qué pasa si queremos guardar tanto nombre como apellido? Podemos tener **dos vectors** diferentes: | ¿Qué pasa si queremos guardar tanto nombre como apellido? Podemos tener **dos vectors** diferentes: | ||
- | <code> | + | <code cpp> |
vector<string> nombres; | vector<string> nombres; | ||
vector<string> apellidos; | vector<string> apellidos; | ||
Línea 32: | Línea 32: | ||
¿Y si tuviéramos que agregar los demás datos? Tendríamos que tener muchos vectors: | ¿Y si tuviéramos que agregar los demás datos? Tendríamos que tener muchos vectors: | ||
- | <code> | + | <code cpp> |
vector<string> nombres; | vector<string> nombres; | ||
vector<string> apellidos; | vector<string> apellidos; | ||
Línea 52: | Línea 52: | ||
Por ejemplo, una esquina en una ciudad viene dada generalmente indicando las dos calles que allí se cruzan. Podríamos tener así un tipo para las esquinas, que podríamos escribir así: | Por ejemplo, una esquina en una ciudad viene dada generalmente indicando las dos calles que allí se cruzan. Podríamos tener así un tipo para las esquinas, que podríamos escribir así: | ||
- | <code> | + | <code cpp> |
struct Esquina | struct Esquina | ||
{ | { | ||
Línea 62: | Línea 62: | ||
o también de forma completamente equivalente: | o también de forma completamente equivalente: | ||
- | <code> | + | <code cpp> |
struct Esquina | struct Esquina | ||
{ | { | ||
Línea 75: | Línea 75: | ||
¿Cómo utilizamos este tipo? Podemos declarar variables de tipo Esquina exactamente igual que declaramos las de otros tipos como int o string: | ¿Cómo utilizamos este tipo? Podemos declarar variables de tipo Esquina exactamente igual que declaramos las de otros tipos como int o string: | ||
- | <code> | + | <code cpp> |
Esquina e; | Esquina e; | ||
Esquina e2; | Esquina e2; | ||
Línea 85: | Línea 85: | ||
El ejemplo muestra que podemos utilizar ''.'' para acceder a los componentes individuales de un struct. Cada uno de estos componentes funciona como una variable independiente, del tipo correspondiente, y el struct lo que hace es funcionar como una sola "gran variable" que las une a todas. También en el ejemplo vemos que es válido utilizar el operador de asignación para copiar structs, igual que copiábamos variables de tipos básicos como ''int''. Esto lo que hará es copiar cada componente. | El ejemplo muestra que podemos utilizar ''.'' para acceder a los componentes individuales de un struct. Cada uno de estos componentes funciona como una variable independiente, del tipo correspondiente, y el struct lo que hace es funcionar como una sola "gran variable" que las une a todas. También en el ejemplo vemos que es válido utilizar el operador de asignación para copiar structs, igual que copiábamos variables de tipos básicos como ''int''. Esto lo que hará es copiar cada componente. | ||
- | Así, para representar la escuela anterior, podíramos tener un struct con la información del alumno: | + | De manera similar a lo que ocurre con los vectors, es posible((En [[cpp-avanzado:c++11|C++11]])) indicar un valor para todo el struct en lugar trabajar con componentes de a una, mediante el uso de llaves para dar los valores en el orden del struct. El ejemplo anterior por lo tanto se podría reescribir como: |
- | <code> | + | <code cpp> |
+ | Esquina e; | ||
+ | Esquina e2; | ||
+ | e = {"Cordoba","Medrano"}; | ||
+ | e2 = e; // Ahora la variable e2 contiene la misma esquina que la variable e | ||
+ | </code> | ||
+ | |||
+ | O directamente en la declaracion: | ||
+ | |||
+ | <code cpp> | ||
+ | Esquina e = {"Cordoba","Medrano"}; | ||
+ | Esquina e2; | ||
+ | e2 = e; // Ahora la variable e2 contiene la misma esquina que la variable e | ||
+ | </code> | ||
+ | |||
+ | Así, para representar la escuela anterior, podríamos tener un struct con la información del alumno: | ||
+ | |||
+ | <code cpp> | ||
struct Alumno | struct Alumno | ||
{ | { | ||
Línea 104: | Línea 121: | ||
Y tener **un solo vector**, que guardará directamente Alumnos: | Y tener **un solo vector**, que guardará directamente Alumnos: | ||
- | <code> | + | <code cpp> |
vector<Alumno> alumnos; | vector<Alumno> alumnos; | ||
+ | </code> | ||
+ | |||
+ | Como un struct define un nuevo tipo que puede usarse igual que los ya existentes, las funciones pueden recibir parámetros de tipo struct: | ||
+ | |||
+ | <code cpp> | ||
+ | string nombreCompleto(Alumno a) | ||
+ | { | ||
+ | return a.nombre + " " + a.apellido; | ||
+ | } | ||
</code> | </code> |