Goal: To be able to create new data types and to be able to use them in code.

Consider having a C++ file that organizes and stores records of student info. Each student record will contain multiple fields of various data types. This data can be stored by having multiple vectors that store each field. This way of storing records is very messy.

If another student needs to be added to the list, every single vector has to change in size. This will lead to many lines of code simply to readjust the size of each vector.

A structure is used in order to create an object, a new data type that is a collection of other data types. These other data types, called member variables, will appear in every object. Those member variables can be accessed through the object. In order to use this new data type, this type must first be declared and defined.

A struct declaration will resemble the following:

<span id="L1" class="line"><span class="k">struct</span> <span class="n">typeName</span> <span class="p">{</span></span>
<span id="L2" class="line">    <span class="n">member1Type</span> <span class="n">member1Name</span><span class="p">;</span></span>
<span id="L3" class="line">    <span class="n">member2Type</span> <span class="n">member2Name</span><span class="p">;</span></span>
<span id="L4" class="line">    <span class="c1">// the number of members in the struct can continue</span></span>
<span id="L5" class="line"><span class="p">};</span></span>

Arrays and other containers can also be placed within a structure. A data type of a member can start off as a certain value if that value is assigned within the struct declaration.

Once a struct has been declared, a new data type can be used across the C++ file. They are initialized just like any other variable.

typeName structName;

In order to access a specific member in a struct, a period is placed in between the struct name and the member name.

structName.memberName
Example Code:
<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="cp">#include &lt;string&gt;</span></span>
<span id="L3" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L4" class="line"></span>
<span id="L5" class="line"><span class="k">struct</span> <span class="n">studentInfo</span> <span class="p">{</span>     <span class="c1">// creates struct that stores student Info</span></span>
<span id="L6" class="line">    <span class="n">string</span> <span class="n">studentNum</span><span class="p">;</span>  <span class="c1">// each student will have a student number</span></span>
<span id="L7" class="line">    <span class="n">string</span> <span class="n">firstName</span><span class="p">;</span>   <span class="c1">// each student will have a first name</span></span>
<span id="L8" class="line">    <span class="n">string</span> <span class="n">lastName</span><span class="p">;</span>    <span class="c1">// ...</span></span>
<span id="L9" class="line">    <span class="kt">int</span> <span class="n">grade</span><span class="p">;</span></span>
<span id="L10" class="line">    <span class="kt">int</span> <span class="n">mark</span><span class="p">;</span></span>
<span id="L11" class="line">    <span class="kt">bool</span> <span class="n">isPassing</span><span class="p">;</span></span>
<span id="L12" class="line"><span class="p">};</span></span>
<span id="L13" class="line"></span>
<span id="L14" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L15" class="line">    <span class="n">studentInfo</span> <span class="n">Thomas</span><span class="p">;</span> <span class="c1">// creates variable that is a studentInfo type</span></span>
<span id="L16" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">studentNum</span> <span class="o">=</span> <span class="mi">404</span><span class="p">;</span>              <span class="c1">// accesses a member of studentInfo</span></span>
<span id="L17" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">firstName</span> <span class="o">=</span> <span class="s">"Thomas"</span><span class="p">;</span></span>
<span id="L18" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">lastName</span> <span class="o">=</span> <span class="s">"The Tank Engine"</span><span class="p">;</span>  <span class="c1">// Assigns Thomas a last name</span></span>
<span id="L19" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">grade</span> <span class="o">=</span> <span class="mi">11</span><span class="p">;</span></span>
<span id="L20" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">mark</span> <span class="o">=</span> <span class="mi">44</span><span class="p">;</span></span>
<span id="L21" class="line">    <span class="n">Thomas</span><span class="p">.</span><span class="n">isPassing</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></span>
<span id="L22" class="line"></span>
<span id="L23" class="line">    <span class="k">if</span> <span class="p">(</span><span class="n">Thomas</span><span class="p">.</span><span class="n">isPassing</span><span class="p">)</span> <span class="p">{</span>               <span class="c1">// Thomas.isPassing is a boolean value</span></span>
<span id="L24" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">Thomas</span><span class="p">.</span><span class="n">firstName</span> <span class="o">&lt;&lt;</span> <span class="s">" "</span> <span class="o">&lt;&lt;</span> <span class="n">Thomas</span><span class="p">.</span><span class="n">lastName</span> <span class="o">&lt;&lt;</span> <span class="s">" is passing."</span><span class="p">;</span></span>
<span id="L25" class="line">    <span class="p">}</span></span>
<span id="L26" class="line">    <span class="k">else</span> <span class="p">{</span></span>
<span id="L27" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">Thomas</span><span class="p">.</span><span class="n">firstName</span> <span class="o">&lt;&lt;</span> <span class="s">" "</span> <span class="o">&lt;&lt;</span> <span class="n">Thomas</span><span class="p">.</span><span class="n">lastName</span> <span class="o">&lt;&lt;</span> <span class="s">" is failing."</span><span class="p">;</span></span>
<span id="L28" class="line">    <span class="p">}</span></span>
<span id="L29" class="line">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L30" class="line"><span class="p">}</span></span>
Output:
Thomas the Tank Engine is failing.

Arrays and vectors of structures can also be used. When accessing a member variable in an array of structures, the index of the array should be placed before the period. (arrayName[index].member).

Structures are effective when organizing lists of records. Structures must be defined within the C++ file it is in. Objects are not often used in contest questions, but are widely used in large scale projects and games. The concept of objects can be delved further into a branch of computer science known as object oriented programming.

In Summary

  • Structures are used to create new data types

  • Structures must first be declared and defined before use

  • All variables in a structure are called member variables

  • A period is used to access a member function in a struct

  • Arrays of structs can be made, and structs can include arrays

Contest Questions