210 likes | 367 Views
Structures - Part II aggregate operations arrays of type struct nested structures compared to classes. Aggregate Operations. Operation Arrays Structs I/O No ( except strings ) No Assignment No Yes Arithmetic No No Comparison No No
E N D
Structures - Part II aggregate operations arrays of type struct nested structures compared to classes
Aggregate Operations Operation Arrays Structs I/O No (except strings) No Assignment No Yes Arithmetic No No Comparison No No Parameter pass. Ref. only Eithervalue or ref. Funct. return value No Yes
Arrays of Structures • struct Salaried • { char dept[5]; • int salary; • int vac_days; • }; • // array of 20 elements, each of type Salaried • Salaried emp[20];
Arrays of Structures • emp[0].dept = “Purc”; • emp[0].salary = 34560; • emp[0].vac_days = 14; • ... • emp[2].salary = 32100; • emp[2].dept = “Ship”; • emp[2].vac_days = 10; • … • emp[19].dept = “Acct”; • emp[19].salary = 22500; • emp[19].vac_days = 12;
Arrays of Structures • struct Payroll • { • int id; • char name[15]; • double payrate; • }; • // an array of 3 records of type Payroll • Payroll employee[3];
Arrays of Structures • // load array -- there are other ways to load the array • Payroll employee[3] = { {11, “Begay”, 7.25}, • {12, “Gioseffi”, 6.50}, • {13, “Marra”, 9.00} }; • // display array • for(ndx = 0; ndx < 3; ndx++) • cout << ‘\n’ << employee[ndx].id • << setw(20) << employee[ndx].name • << setw(20) << employee[ndx].payrate;
Arrays of Structures • struct Payroll{ int id; char name[15]; double payrate; }; // prototypesvoid loadarray(Payroll [3]); void showarray(Payroll [3]); *
Arrays of Structures • void main() • { //declare array of 3 records of type Payroll • // and initialize the first record • Payroll employee[3] = { 11, "Begay", 7.25 }; • loadarray(employee); // calls • showarray(employee); • cout << endl<<endl; // for formatting • } // end main()
Arrays of Structures • // load array - data typically entered via file input • void loadarray(Payrollstaff[3]) • {// begin at 1 because [0] already entered • for(int ndx = 1; ndx < 3; ndx++) • { cout << "Enter the ID, name, and pay rate: "; • cin >> staff[ndx].id >> staff[ndx].name • >> staff[ndx].payrate; • cout << endl; • } • }
Arrays of Structures • void showarray(Payrollstaff[3]) • { • cout << setiosflags(ios::fixed) • << setprecision(2); • for(int ndx = 0; ndx < 3; ndx++) • cout << '\n' << setw(5) << staff[ndx].id • << setw(13) << staff[ndx].name • << setw(10) << staff[ndx].payrate; • }
In Class Assign. 3 • Elementat. numat. massdensity • tungsten (W)74183.850 19.300 • sulfur (S)1632.064 2.07 • carbon (C) 612.011 2.260 9. Write a program which: a. creates an array of structures b. uses a global constant for the array size c. contains functions to load and to display d. format similar to the above chart
In Class Assign. 3-ans. #include<iostream> #include<iomanip> using namespace std; struct Element { char name[20]; char symbol; int at_num; double at_mass; double density; }; const int ARR_SIZE = 5; void getData(Element *); // used pointerto cycle thru array void showData(Element *); // See filearray.cc sent on 4/30 void main() { //declare array - type Element Element FiveElements[5]; // first 3 records are initialized in main getData(&FiveElements[3]); // 1st call gets address of 4th struct showData(FiveElements); // 2nd call gets beginning address of array cout << ‘\n’; } // end main()
NestedStructures • struct Date • { int month; • int day; • int year; }; • struct Vital_Data • { char name[15]; • char dept[10]; • int ID; • Date birth; // Date must be previously defined • double payrate; • }; *
Nested Structures • Vital_Data Courtney; • // declaration of an object • // assignments of data to an object • strcpy (Courtney.name,“Lawrence”); • strcpy (Courtney.dept,“personnel”); • Courtney.ID = 1234; • Courtney.birth.month = 10;// birth is a struct • Courtney.birth.day = 25; // note: two periods • Courtney.birth.year = 77; // individually assigned • Courtney.payrate = 12.75; • Vital_Data Personnel[2]; // an array of structs • // this assignment syntax works on our Unix compiler
Nested Structures • 1. Write the cin statements for thedepartment and the birthday. • 2. Write the cout statements for thedepartment and the birthday.
Nested Structures • void loadarray(vital_Data personnel[2]) • { • for(int i = 0; i < 2 ; i++) • { cout << "\nEnter the name: "; • cin >> • cout << "Enter the department: "; • cin >> • cout << "Enter the id# and the payrate: "; • cin >> >> • cout << "Enter the birth date (dd mm yy) "; • cin >> • >> • >> } } personnel[i].name; personnel[i].dept; personnel[i].ID personnel[i].payrate; personnel[i].birth.day personnel[i].birth.month personnel[i].birth.year; * * * * *
Formatted Output • ID# name department birthday payrate • 1234 Lawrence personnel 10/ 5/77 12.75 • 765 Newman shipping 2/29/59 13.11 cout << setiosflags(ios::fixed | ios::right); for(int i = 0; i < 2 ; i++) cout << '\n' << setw(5) << setprecision(0) << personnel[i].ID << setw(12) << personnel[i].name << setw(11) << personnel[i].dept << setw(5) << personnel[i].birth.day <<'/' << setw(2) << personnel[i].birth.month <<'/' << setw(2) << personnel[i].birth.year << setw(7) << setprecision(2) << personnel[i].payrate;
Structure vs. Class • By default: • struct have public member variables • class have private member variables
Class • Class syntax: • class Classname • { • private: • list of private variable declarationspublic: • list of function prototypes • };
Class • An example: • class Date • { • private: • int day; • int month; • int year; • public: • (member functions) • };
Imagination • is more important • than knowledge. • Albert Einstein