המשך פתרון משימה 9 -
הפונקציה Read במחלקה Employee
 
פונקצית Read השנייה קוראת רשומת עובד בהתאם למקום בו הקובץ נמצא, והיא מוגדרת כך:

void Employee::Read()
{
 location = in->tellg();
 in->read((char *)&number, sizeof(number));
 if (in->gcount() != sizeof(number))
  throw EndOfFile();
 in->read((char *)&status, sizeof(status));
 in->read(name, EmpNameMax);
 in->read((char *)&salaryType,
            sizeof(salaryType));
 in->read((char *)&salary, sizeof(salary));
 hireDate.Read(in);
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

פונקציה זו קוראת כל שדה מהרשומה לתוך משתנה המחלקה המתאים באובייקט ה-Employee.
הקריאה מתבצעת ע"י שימוש בפונקציה read, פונקציה הקוראת מספר בתים מסוים מתוך קובץ לתוך מערך תווים. הפונקציה read מקבלת כפרמטר ראשון את כתובת מערך התווים. במקרה שלנו, מכיוון שרוב משתני המחלקה אינם מחרוזות, עלינו לבצע להם המרה לטיפוס מצביע ל-char בעת הקריאה לתוכם.
הפרמטר השני הינו מספר הבתים אותם נרצה לקרוא, ולכן בכל קריאה הגדרנו את מספר הבתים כמספר הבתים של הטיפוס אותו קוראים.
הפונקציה המתאימה לכתיבת בתים לתוך קובץ היא הפונקציה write, המקבלת את אותם הפרמטרים.
הפונקציה gcount סופרת את מספר הבתים שנקראו בפעם האחרונה והשתמשנו בה כדי לבדוק האם הגענו לסוף הקובץ.
מדוע אם כן חילקנו את תהליך הקריאה לשני צעדים?
ובכן הסיבה לכך היא בפונקצית ה-Open:

void Employee::Open()
{
 /* same definition of Open function... */
 try
  {employee.Read();}
 /* rest of definition of Open function... */
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

הפונקציה משתמשת בפונקצית Read השנייה בעת בניית האינדקס כדי לקרוא לדעת איזו רשומה ממוקמת היכן.
לכן נזקקנו לפונקציה הקוראת את הרשומה מהמקום הנוכחי בקובץ. וביצוע תהליך מסוים במספר מקומות שונים בתוכנית מצדיק את הפיכתו לפונקציה נפרדת.