2.1. First, There Was struct

[ fromfile: classes.xml id: structs ]

In the C language, the struct keyword enables the programmer to define a structured chunk of memory that can store a heterogeneous set of data. Example 2.1 shows the definition of a structured piece of memory composed of smaller chunks of memory.

Example 2.1. src/structdemo/demostruct.h

[ . . . . ]
struct Fraction {
    int numer, denom;
    string description;
};
[ . . . . ]

<include src="src/structdemo/demostruct.h" href="src/structdemo/demostruct.h" id="demostructh" mode="cpp"/>


Each smaller chunk (numer, denom, description) of the struct is accessible by name. The smaller chunks are called data members or, sometimes, fields. Code that is external to the struct definition is called client code. Example 2.2 shows how client code can use a struct as a single entity.

Example 2.2. src/structdemo/demostruct.cpp

[ . . . . ]
void printFraction(Fraction f) {        1
    cout << f.numer << "/" << f.denom << endl;
    cout << "  =? " << f.description << endl; 
}
int main() {  
    Fraction f1;
    f1.numer = 4;
    f1.denom = 5;
    f1.description = "four fifths";   
    Fraction f2 = {2, 3, "two thirds"}; 2
    
    f1.numer = f1.numer + 2;            3
    printFraction(f1);
    printFraction(f2);
    return 0;
}
Output:

  6/5
  =? four fifths
  2/3  
  =? two thirds



1

Passing a struct by value could be expensive if it has large components.

2

Member Initialization.

3

Client code can change individual data members.

<include src="src/structdemo/demostruct.cpp" href="src/structdemo/demostruct.cpp" id="demostructcpp" mode="cpp"/>


The printFraction() function in this application displays the individual data members on the screen in its own peculiar way. Notice also that the client code was able to produce a Fraction that has an incorrect description.