250 likes | 427 Views
Chapter 11 Structured Types, Data Abstraction and Classes. Dale/Weems/Headington. Chapter 11 Topics. Meaning of a Structured Data Type Declaring and Using a struct Data Type C++ union Data Type. floating. address. float double long double. pointer reference. C++ Data Types.
E N D
Chapter 11Structured Types,Data Abstraction and Classes Dale/Weems/Headington
Chapter 11 Topics • Meaning of a Structured Data Type • Declaring and Using a struct Data Type • C++ union Data Type
floating address float double long double pointer reference C++ Data Types simple structured integral enum array struct union class char short int long bool
Tipo de dato Structured El tipo de dato “structured” tiene la particularidad de que cada valor es una colección de items. • Toda la colección tiene un solo nombre • Cada componente (item) puede ser acedido individualmente
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. . .
thisAnimal 5000 .id 2037581 .name “giant panda” .genus “Ailuropoda” .species “melanoluka” .country “China” .age 18 .weight 234.6 .health Good
anotherAnimal 6000 .id 5281003 .name “llama” .genus “Lama” .species “peruana” .country “Peru” .age 7 .weight 278.5 .health Excellent
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
Declaración del tipo struct SYNTAXIS struct TypeName // does not allocate memory { MemberList } ; MemberList SYNTAXIS DataType MemberName ; DataType MemberName ; . . .
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.
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.
Accedermiembros de unstruct 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
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++;
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
Operaciones de una estructura Aggregate • I/O, aritmética, y comparaciones de la estructura completa no es permitido. • operaciones válidas que incluyan una estructura completa son: • asignaciones de una estructura a otra del mismo tipo, • pasar a una función como argumento (por valor o por referencia), • devolver (return) como un valor de una función
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. . .
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
Pasando un tipo struct por Referencia void ChangeAge ( /* inout */ AnimalType& thisAnimal ) // Adds 1 to age // Precondition: thisAnimal.age is assigned // Postcondition: thisAnimal.age == thisAnimal.age@entry + 1 { thisAnimal.age++ ; }
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
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 . . .
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).
struct DateType { int month ; // Assume 1 . . 12 int day ;// Assume 1 . . 31 int year ; // Assume 1900 . . 2050 }; struct StatisticsType { float failRate ; DateType lastServiced ; // DateType is a struct type int downDays ; } ; struct MachineRec { int idNumber ; string description ; StatisticsType history ; // StatisticsType is a struct type DateType purchaseDate ; float cost ; } ; MachineRec machine ; 22
struct type variable machine 7000 5719 “DRILLING…” 3 21 1995 8000.0 .02 1 25 1999 4 .month .day .year .month .day .year .failrate .lastServiced .downdays .idNumber .description . history .purchaseDate .cost machine.history.lastServiced.year has value 1999
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; } ;
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