p>
Т.к. об'єкт класу книги є відкритим атрибутом класу документа, то доступ до членів класу книги здійснюється через вказівник на об'єкт класу документа. Т.ч., щоб викликати функцію-член класу CBookClass, необхідно отримати спочатку покажчик на об'єкт класу CBookDoc:
CBookDoc * pDoc = GetDocument ();
pDoc-> m_Book.SetTreeCtrl (& refCtrl);
Якщо члени-функції викликаються всередині їх класу, то виклик цих функцій здійснюється безпосередньо без вказівки імені класу. Наприклад, усередині функції CRazdels :: DeleteRazdels () здійснюється виклик членів-функцій, успадкованих від базового класу CObArray:
void CRazdels :: DeleteRazdels ()
{
WORD Counter;
for (Counter = 0; Counter < GetSize (); Counter + +)
{
CRazdel * Razdel = (CRazdel *) GetAt (Counter);
Razdel-> GetGlavas () -> DeleteGlavas ();
delete Razdel;
}
RemoveAll ();
}
Використання успадкування
Згідно концепції об'єктно-орієнтованого програмування функція завантаження файлу книги з диска повинна бути інкапсулюватися в самому класі CBookClass. Основні етапи створення класу, який може самостійно організувати збереження-відновлення (у документації на MFC застосовується термін serialize -серіалізация ) власних членів-змінних перераховані нижче:
1.Об'явіть клас як похідний від CObject.
2.В оголошення класу включити макрос DECLARE_SERIAL. p> 3.В реалізацію класу включити макрос IMPLEMENT_SERIAL. p> 4.Перегрузіть метод Serialize (), успадкований від базового класу.
5.Перегрузіть для нового класу серед інших конструктор за замовчуванням.
Т.ч. в нашому випадку неминуче доводиться застосовувати механізм успадкування класів. Як тол ько ми оголосили клас книги похідним від CObject, нам дозволяється використовувати серіалізацию даних.
Крім виконання вищевказаних п'яти пунктів необхідно також перевантажити метод Serialize () і для класу документа:
void CBookDoc :: Serialize (CArchive & ar)
{
m_Book.Serialize (ar);
}
Також як і метод Serialize () класу документа перевантажений метод Serialize () класу книги не виконує безпосереднє читання тексту книги з файлу. Цей метод витягує з файлу тільки лише службову інформацію, визначаючи назву книги і кількість її розділів. Далі в циклі створюються об'єкти класу розділу, їм делегується завантаження з файлу розділів, потім відбувається додавання розділів в коллекцию розділів книги. Аналогічно розділ, завантаживши службову інформацію розділу, делегує завантаження глав класу глави; глава, у свою чергу, делегує завантаження сторінок класу сторінки; а вже сторінка викликає оператор завантаження з архіву, визначений у MFC-класі CString. b>
Реалізація залежностей