1
Records
C++ Structs
Chapter 14
2
What to do with records?
Declaring records
Accessing
records
Accessing the
field of a record
What is a union?
Can records be in
arrays?
3
Records
Recall that elements of arrays must all
be of the same type
In some situations, we wish to group
elements of different types
scores : 85 79 92 57 68 80 . . .
0 1 2 3 4 5 98 99
employee R. Jones 123 Elm 6/12/55 $14.75
4
Records
RECORDS are used to group related
components of different types
Components of the record are called
fields
In C++
– record called a struct (structure)
– fields called members
employee R. Jones 123 Elm 6/12/55 $14.75
5
Records
C++ struct
– structured data type
– fixed number of components
– elements accessed by name, not by index
– components may be of different types
struct part_struct {
char descrip [31], part_num [11];
float unit_price;
int qty; };
6
Declaring struct Variables
Given
Declare :
struct part_struct {
char descrip [31], part_num [11];
float unit_price;
int qty; };
part_struct new_part, old_part;
Use struct name as a type.
7
Accessing Components
Use the name of the record
the name of the member
separated by a dot .
The dot is called the member selector
old_part.qty = 5;
cout << new_part.descrip;
8
Aggregate Operations with
Structures
Recall that arrays had none (except
reference parameter)
Structures DO have aggregate
operators
– assignment statement =
– parameter (value or reference)
– return a structure as a function type
9
Aggregate Operations with
Structures
Limitations on aggregate operations
– no I/O
– no arithmetic operations
– no comparisons
cout << old_part;
cin >> new_part;
old_part = new_part + old_part;
if (old_part < new_part)
cout << ...;
10
Aggregate Operations with
Structures
 struct variables must be compared
member-wise.
 To compare the values of student and
newStudent, you must compare them
member-wise, as follows:
if(student.firstName == newStudent.firstName &&
student.lastName == newStudent.lastName) ...
11
Input/Output
 There are no aggregate
input/output operations on struct.
• Data in a struct variable must be
read one member at a time.
• Contents of a struct must be
written one member at a time.
12
struct Variables and Functions
 A struct variable can be passed as a
parameter either by value or by
reference.
A function can return a value of the type
struct
Note example program fragment
13
Contrast Arrays and structs
14
Arrays of Records
First declare a struct (such as
part_struct)
Then specify an array of that type
Access elements of the array, elements
of the struct
part_struct part_list [50];
for (x = 0; x <50; x++)
cout << _______________________;
How do we
print all the
descrip fields?
part_list[x].descrip
15
Records with Arrays
Example
const arraySize = 1000;
struct listType
{
int elements[arraySize];
//array containing the list
int listLength;
//length of the list
} See sample
program
16
Hierarchical Records
Defn => records where at least one of
the components is, itself, a record
Example:
struct inventory_struct {
part_struct part;
int qty_sold, re_order_qty;
vendor_struct vendor; };
17
Unions
defn => a struct that holds only one of
its members at a time during program
execution
union Qty_type {
int count;
float linear_ft;
long cu_in; };
Qty_type how_many;
At run time, how_many
contains either
•an int
•a float
•a long . . .
But … never all three
18
Choosing Data Structures
Strive to group logical elements of a
structure together
– calls for hierarchical structures
Push details of entities down to lower
levels of the structure
Data Abstraction <=> separation of
logical peoperties of a data type from its
implementation
19
Testing and Debugging Hints
Declaration of a struct type must end
with a semicolon ;
Be sure to specify the full member
selector when referencing a component
of a struct variable
– don’t leave out the struct name
20
Testing and Debugging
When using an array in a struct, the
index goes at the end
student_rec.scores[x]
When using an array of struct, the index
goes after the struct name
parts_list[x].qty
21
Testing and Debugging
Process struct members separately …
the only aggregate operations will be
Assignment =
Parameter passing
void do_it (part_struct
part);
Function return
part_struct blanked_part ( );
22
Testing and Debugging
Be careful using same member names
in different struct types
Compiler keeps them separate OK
Human readers can easily confuse
them
struct parts {
int qty;
. . .
} ;
struct test_scores {
int qty;
. . .
} ;

Structure

  • 1.
  • 2.
    2 What to dowith records? Declaring records Accessing records Accessing the field of a record What is a union? Can records be in arrays?
  • 3.
    3 Records Recall that elementsof arrays must all be of the same type In some situations, we wish to group elements of different types scores : 85 79 92 57 68 80 . . . 0 1 2 3 4 5 98 99 employee R. Jones 123 Elm 6/12/55 $14.75
  • 4.
    4 Records RECORDS are usedto group related components of different types Components of the record are called fields In C++ – record called a struct (structure) – fields called members employee R. Jones 123 Elm 6/12/55 $14.75
  • 5.
    5 Records C++ struct – structureddata type – fixed number of components – elements accessed by name, not by index – components may be of different types struct part_struct { char descrip [31], part_num [11]; float unit_price; int qty; };
  • 6.
    6 Declaring struct Variables Given Declare: struct part_struct { char descrip [31], part_num [11]; float unit_price; int qty; }; part_struct new_part, old_part; Use struct name as a type.
  • 7.
    7 Accessing Components Use thename of the record the name of the member separated by a dot . The dot is called the member selector old_part.qty = 5; cout << new_part.descrip;
  • 8.
    8 Aggregate Operations with Structures Recallthat arrays had none (except reference parameter) Structures DO have aggregate operators – assignment statement = – parameter (value or reference) – return a structure as a function type
  • 9.
    9 Aggregate Operations with Structures Limitationson aggregate operations – no I/O – no arithmetic operations – no comparisons cout << old_part; cin >> new_part; old_part = new_part + old_part; if (old_part < new_part) cout << ...;
  • 10.
    10 Aggregate Operations with Structures struct variables must be compared member-wise.  To compare the values of student and newStudent, you must compare them member-wise, as follows: if(student.firstName == newStudent.firstName && student.lastName == newStudent.lastName) ...
  • 11.
    11 Input/Output  There areno aggregate input/output operations on struct. • Data in a struct variable must be read one member at a time. • Contents of a struct must be written one member at a time.
  • 12.
    12 struct Variables andFunctions  A struct variable can be passed as a parameter either by value or by reference. A function can return a value of the type struct Note example program fragment
  • 13.
  • 14.
    14 Arrays of Records Firstdeclare a struct (such as part_struct) Then specify an array of that type Access elements of the array, elements of the struct part_struct part_list [50]; for (x = 0; x <50; x++) cout << _______________________; How do we print all the descrip fields? part_list[x].descrip
  • 15.
    15 Records with Arrays Example constarraySize = 1000; struct listType { int elements[arraySize]; //array containing the list int listLength; //length of the list } See sample program
  • 16.
    16 Hierarchical Records Defn =>records where at least one of the components is, itself, a record Example: struct inventory_struct { part_struct part; int qty_sold, re_order_qty; vendor_struct vendor; };
  • 17.
    17 Unions defn => astruct that holds only one of its members at a time during program execution union Qty_type { int count; float linear_ft; long cu_in; }; Qty_type how_many; At run time, how_many contains either •an int •a float •a long . . . But … never all three
  • 18.
    18 Choosing Data Structures Striveto group logical elements of a structure together – calls for hierarchical structures Push details of entities down to lower levels of the structure Data Abstraction <=> separation of logical peoperties of a data type from its implementation
  • 19.
    19 Testing and DebuggingHints Declaration of a struct type must end with a semicolon ; Be sure to specify the full member selector when referencing a component of a struct variable – don’t leave out the struct name
  • 20.
    20 Testing and Debugging Whenusing an array in a struct, the index goes at the end student_rec.scores[x] When using an array of struct, the index goes after the struct name parts_list[x].qty
  • 21.
    21 Testing and Debugging Processstruct members separately … the only aggregate operations will be Assignment = Parameter passing void do_it (part_struct part); Function return part_struct blanked_part ( );
  • 22.
    22 Testing and Debugging Becareful using same member names in different struct types Compiler keeps them separate OK Human readers can easily confuse them struct parts { int qty; . . . } ; struct test_scores { int qty; . . . } ;