2.1 Дерево об'єктів
Одним із завдань курсового проектування було створення так званого дерева об'єктів. Автор курсового проектування запропонував модель, представлену на малюнку 18. Слід зазначити, що головним класом (класом батьком) є верхній клас, а інші класи (класи нащадки) успадковують всі методи і дані класів предків публічним способом успадкування. При цьому спадкування йде зверху вниз (вказано за допомогою стрілок на малюнку).
Малюнок 18.
Клас-батько rf, який описаний в однойменному файлі rf. h, містить основні поля даних запису, що відповідає кожному футболістові:
private:
Club;// футбольний клуб
string Number;// ігровий номер
string Age;// вік
string Name;// ім'я футболіста
При оголошенні дані використовувалося ключове слово private raquo ;. Це означає, що дані класу country закриті і отримати доступ до них можна тільки за допомогою спеціальних методів, описаних нижче (як приклад наводиться метод доступу до змінної Name, що містить назву ім'я футболіста).
//ім'я футболіста
inline string GetName () {return Name; } void SetName (string amp; s) {Name=s; }
Метод inline lt; тип значення gt; Get ... () повертає відповідне поле даних, а метод - inlinevoidSet ... ( lt; тип зберігається значення gt; amp; s) заповнює відповідне поле даних. В даному випадку в цьому полягає принцип інкапсуляції, одного з властивостей об'єктно-орієнтованого програмування.
Крім методів, представлених вище, клас countryсодержіт також ряд таких методів:
//обробка даних
virtualvoidDownloading (istream amp;);// зчитування з файлу
virtual void Printing ();// вивід на екран void SetingNewData ();// заповнення з клавіатури
virtual void Uploading (ostream amp;);// завантаження у файл
//дії
virtual void Whatzadacha () {};// головне завдання void Whatvtorzadacha () {};// вторинна завдання () {};// робоча нога
Всі методи, що служать для обробки даних - віртуальні (визначаються ключовим словом virtual ), вони можуть бути використані для обробки інформації, що міститься в об'єкті певного класу.
Те ж саме стосується і методів, що описують якісь дії, чинені об'єктами. Приміром, для Центрального нападаючого і флангового нападаючого актуальним є дія, що описує їх завдання, але завдання цих футболістів виглядає по-різному, тобто метод описує дію на поле один і той же, але результат його виконання різний для об'єктів різних класів (у нашому випадку ці об'єкти - Центральний нападник і Фланговий нападник). У цьому полягає сенс поліморфізму в парадигмі об'єктно-орієнтованого програмування.
Також в класі countryреалізована така можливість мови C ++ як перевантаження оператора. Був перевантажений оператор == з метою заміни дії (strstr (getTypeName (), str_1)!=NULL).
2.2 Робота зі списком
Ще одним завданням курсового проектування було створення контейнера типу список і ряду функцій для його обробки. Прототипи цих функцій описані у файлі functions_in_list. h, а їх реалізація у файлі functions_in_list. cpp. Простір імен stdmyspisok містить наступні функції обробки списку:
//включення нового елементу в перелік з клавіатури
void IncludeElement (list lt; Rf * gt; amp ;, Rf *);
//включення нового елементу в перелік з файлу
void IncludeElementFromFile (list lt; Rf * gt; amp ;, Rf *, char *);
//пошук елемента
Void SearchingElement (list lt; Rf * gt; amp ;, Rf *, string amp ;, const char *);// друк всього списку (list lt; Rf * gt; amp;);
//друк конкретного елемента зі списку
voidPrintElementFromList (list lt; Rf * gt; amp ;, int amp;);
//друк певної категорії списку
void PrintCategoryFromList (list lt; Rf * gt; amp ;, const char *);
//в...