| Convenient references to long/deep fields. | Lecture 2 - slide 17 : 42 Program 4 |
// A program with two versions of the function work_on_persons_road_number.
// Illustrates how a reference can be used for naming convenience.
#include <iostream>
#include <string>
using namespace std;
typedef struct{
char road[15];
int roadNumber;
char town[20];
} address;
typedef struct{
int idNumber;
char firstName[10],
lastName[20];
address location;} person;
bool even(int n){
return n%2 == 0;
}
// A function in which a long and deep field name is used many times.
void work_on_persons_road_number(person &p){
if (even(p.location.roadNumber))
p.location.roadNumber = p.location.roadNumber + 1;
else
p.location.roadNumber = 0;
}
// A version of the function that binds the roadNumber field to an
// int reference.
void work_on_persons_road_number_with_ref(person &p){
int &lrn = p.location.roadNumber;
if (even(lrn))
lrn = lrn + 1;
else
lrn = 0;
}
void print_person(person &p){
cout << p.firstName << " " << p.lastName << endl
<< p.location.road << " " << p.location.roadNumber << endl
<< p.location.town << endl << endl;
}
int main(){
person morten =
{190583, /* Initializer */
"Morten", "Madsen", /* and only that... */
{"Bredgade", 23, "Middelfart"}
};
print_person(morten);
work_on_persons_road_number(morten);
print_person(morten);
work_on_persons_road_number_with_ref(morten);
print_person(morten);
}