struct employee { //name of this new type is employee string name; //four members/fields int emp_num; int dept; float salary; };A struct can have any number of members, each of any type, each with a name.
struct definitions are typically global:
includes ... consts ... struct type definitons ... prototypes ... function definitions ...Now employee is a type of the language, like int or float is.
employee emp1, emp2; //2 employee variables
The members of a struct variable are variables that can be processed
like any other variables of that type.
Access a member of a struct with the . dot operator:
struct_variable.member_name emp1.emp_num = 37; emp1.dept = 6; emp1.salary = 30000; emp1.name = "Smith"; if (emp1.dept == 8) cout << "Dept 8 employee" << emp1.name; emp2.dept = emp1.dept; //assign value of an int variable to an int variable cin >> emp2.name; //name member is a string variable cout << emp1.emp_num; //int variable //cin and cout can not handle entire structs. //Can only input and output chars, strings, ints, floats. cin >> emp1.name >> emp1.dept; cout << emp1.salary;Only operation on entire structs is assignment (struct to struct copy): All members of one struct copied to other struct:
emp2 = emp1; //can assign structs of same type ----------------------------------------- // structure for student data struct student { string lastname; string firstname; int id; float gpa; }; student s1, s2, s3; //3 student struct variables cout << "Enter student's last name: "; cin >> s1.lastname; cout << "Enter student's first name: "; cin >> s1.firstname; cout << "Enter student's id: "; cin >> s1.id; cout << "Enter student's GPA: "; cin >> s1.gpa; get_student_info(s2); //argument is student struct get_student_info(s3); //needs to change actual arg, so reference arg void get_student_info (student &stu) { //reference arg since function is to change actual arg cout << "Enter student's last name: "; cin >> stu.lastname; cout << "Enter student's first name: "; cin >> stu.firstname; cout << "Enter student's id: "; cin >> stu.id; cout << "Enter student's GPA: "; cin >> stu.gpa; } Prototype: void get_student_info (student &); --------- Alternatively: function that returns a student struct student get_student_info () { student stu; cout << "Enter student's last name: "; cin >> stu.lastname; cout << "Enter student's first name: "; cin >> stu.firstname; cout << "Enter student's id: "; cin >> stu.id; cout << "Enter student's GPA: "; cin >> stu.gpa; return stu; } Use it like this: s1 = get_student_info(); ------------------------------- display_student(s1); display_student(s2); Output: 12345 Smith,Bob 3.45 43256 Freud,Sigmund 2.70 void display_student (student pupil) { cout << setw(6) << pupil.id << "\t" << pupil.lastname << "," << pupil.firstname << "\t" << pupil.gpa << endl; } ---------------------------------------- //structure for dates struct date { int year; int month; int day; }; date today, tomorrow, birthday, christmas; birthday.year = 1980; birthday.month = 4; birthday.day = 30; cout << "Enter today's date" << endl; get_date(today); void get_date (date &d) { cout << "Enter day: "; cin >> d.day; cout << "Enter month: "; cin >> d.month; cout << "Enter year: "; cin >> d.year; } //Or include error checking. print_date(today); Output: 26 November 1994 You write the definition. ----------------------------------- Function to compare two dates for ordering. Similar to strcmp. date my_birthday, your_birthday; cout << "Enter first birthday"; get_date(my_birthday); cout << "Enter second birthday"; get_date(your_birthday); if (datecmp(my_birthday,your_birthday) == 0) cout << "Same age"; else if (datecmp(my_birthday,your_birthday) == -1) cout << "I'm older"; else cout << "You're older"; //Returns -1 if 1st is < (earlier than) 2nd, // 1 if 2nd is < 1st, 0 if same int datecmp (date d1, date d2) { if (d1.year < d2.year) return -1; else if (d2.year < d1.year) return 1; else //years are same if (d1.month < d2.month) return -1; else if (d2.month < d1.month) return 1; else //months are same too if (d1.day < d2.day) return -1; else if (d2.day < d1.day) return 1; else //days are same too return 0; }
Next (arrays of structs)