La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.

Presentaciones similares


Presentación del tema: "1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington."— Transcripción de la presentación:

1 1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington

2 2 Chapter 11 Topics l Meaning of a Structured Data Type Declaring and Using a struct Data Type C++ union Data Type

3 3 C++ Data Types structured array struct union class address pointer reference simple integral enum char short int long bool floating float double long double

4 4 Tipo de dato Structured El tipo de dato “structured” tiene la particularidad de que cada valor es una colección de items. l Toda la colección tiene un solo nombre l Cada componente (item) puede ser acedido individualmente

5 5 Structured Type (Cont.) A menudo en los programas tenemos información relacionada de varios tipos de datos que queremos almacenar juntos para un acesso más conveniente debajo del mismo “identifier”, por ejemplo...

6 6 thisAnimal 5000.id 2037581.name “giant panda”.genus “Ailuropoda”.species “melanoluka”.country “China”.age 18.weight 234.6.health Good

7 7 anotherAnimal 6000.id 5281003.name “llama”.genus “Lama”.species “peruana”.country “Peru”.age 7.weight 278.5.health Excellent

8 8 struct AnimalType enum HealthType { Poor, Fair, Good, Excellent } ; struct AnimalType// declares a struct data type {// does not allocate memory long id ; string name ; string genus ; string species ; struct members string country ; int age ; float weight ; HealthType health ; } ; AnimalType thisAnimal ; // declare variables of AnimalType AnimalType anotherAnimal ; 8

9 9 Declaración del tipo struct SYNTAXIS struct TypeName // does not allocate memory { MemberList } ; MemberList SYNTAXIS DataType MemberName ;.

10 10 Declaración (continuación) La declaración de struct nombra los tipos y nombres de los miembros de la estructura. Esta declaración no separa espacio en memoria para ninguna de las variables mencionadas. Para eso, se necesita declarar las variables.

11 11 Más sobre las declaraciones tipo struct Si la declaración precede a todas las funciones, entonces todas esas funciones la pueden reconocer. Si se pone dentro de una función, solo la puede utilizar esa función. Es común definir estas estructuras en archivos tipo “header” (.h) los cuales son invocados con la directiva #include. Es posible que miembros de otras estructuras tengan los mismos “identifiers”(nombres de variables). También es posible usar los mismos “dentifiers” en variables que no esten dentro de una estructura como tal.

12 12 Acceder miembros de un struct Dot ( punto ) es el “member selection operator”. Despues de ser declarados, los miembros puedes ser usados precedidos del nombre de la estructura, el punto y el nombre de la variable al final. EJEMPLOS thisAnimal.weight anotherAnimal.country

13 13 Operaciones Válidas en los miembros de una estructura de acuerdo a su tipo de dato thisAnimal.age = 18; thisAnimal.id = 2037581; cin >> thisAnimal.weight; getline ( cin, thisAnimal.species ); thisAnimal.name = “giant panda”; thisAnimal.genus[ 0 ] = toupper (thisAnimal.genus[ 0 ] ) ; thisAnimal.age++;

14 14 Operación “Aggregate” Es una operación en una estructura de datos como un todo, al contrario de las otras operaciones en que se trabajan los datos individualmente

15 15 Operaciones de una estructura Aggregate l I/O, aritmética, y comparaciones de la estructura completa no es permitido. l operaciones válidas que incluyan una estructura completa son: n asignaciones de una estructura a otra del mismo tipo, n pasar a una función como argumento (por valor o por referencia), n devolver (return) como un valor de una función

16 16 Ejemplos de operaciones válidas del aggregate struct anotherAnimal = thisAnimal ; // assignment WriteOut(thisAnimal); // value parameter ChangeWeightAndAge(thisAnimal); // reference parameter thisAnimal = GetAnimalData( ); // return value of function Ahora vienen 3 funciones que nos muestra el uso de esta estructura...

17 17 void WriteOut( /* in */ AnimalType thisAnimal) // Prints out values of all members of thisAnimal // Precondition: all members of thisAnimal are assigned // Postcondition: all members have been written out { cout << “ID # “ << thisAnimal.id << thisAnimal.name << endl ; cout << thisAnimal.genus << thisAnimal.species << endl ; cout << thisAnimal.country << endl ; cout << thisAnimal.age << “ years “ << endl ; cout << thisAnimal.weight << “ lbs. “ << endl ; cout << “General health : “ ; WriteWord ( thisAnimal.health ) ; } 17

18 18 void ChangeAge ( /* inout */ AnimalType& thisAnimal ) // Adds 1 to age // Precondition: thisAnimal.age is assigned // Postcondition: thisAnimal.age == thisAnimal.age@entry + 1 { thisAnimal.age++ ; } Pasando un tipo struct por Referencia

19 19 AnimalType GetAnimalData ( void ) // Obtains all information about an animal from keyboard // Postcondition: // Function value == AnimalType members entered at kbd { AnimalType thisAnimal ; char response ; do {// have user enter all members until they are correct. } while (response != ‘Y’ ) ; return thisAnimal ; } 19

20 20 Estructuras Jerárquicas El miembro de una estructura, puede ser otra estructura como tal. Esto se conoce como “nested or hierarchical structures”. Las estructuras Jerárquicas son útiles cuando existe mucha información detallada en un record. POR EJEMPLO...

21 21 struct MachineRec La información de cada máquina contiene: un idNumber, una descripción escrita, la fecha de compra (“purchase date”), el costo, y un historial (incluye “failure rate”, “number of days down”, y fecha del último servicio).

22 22 struct DateType {int month ; // Assume 1.. 12 int day ;// Assume 1.. 31 int year ; // Assume 1900.. 2050 }; struct StatisticsType {floatfailRate ; DateTypelastServiced ; // DateType is a struct type intdownDays ; } ; struct MachineRec {int idNumber ; string description ; StatisticsType history ; // StatisticsType is a struct type DateType purchaseDate ; float cost ; } ; MachineRec machine ; 22

23 23 struct type variable machine 7000.idNumber.description. history.purchaseDate.cost.month.day.year 5719 “DRILLING…” 3 21 1995 8000.0.failrate.lastServiced.downdays.02 1 25 1999 4.month.day.year machine.history.lastServiced.year has value 1999

24 24 Uniones en C++ DEFINICIÓN Una unión es una estructura que maneja sólo uno de sus miembros a la vez durante la ejecución del programa. EJEMPLO union WeightType { long wtInOunces ; int wtInPounds; only one at a time float wtInTons; } ;

25 25 Utilizando “Unions” union WeightType// declares a union type { long wtInOunces ; int wtInPounds; float wtInTons; } ; WeightType weight;// declares a union variable weight.wtInTons = 4.83 ; // Weight in tons is no longer needed. Reuse the memory space. weight.wtInPounds = 35; 25


Descargar ppt "1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington."

Presentaciones similares


Anuncios Google