Правила программирования на Си и Си++


         

Листинг 8. Фрагмент реализации связанного



Листинг 8. Фрагмент реализации связанного списка
1  class list_node;
2
3  class linked_list
4  {
5     int number_of_elements_in_list;
6     list_node *root;
7
8  private:     // этот раздел содержит сообщения, получаемые
9     friend class list_node; // только от объектов list_node
10    void have_removed_an_element(void)
11    {
12       --number_of_elements_in_list;
13    }
14
15 public:
16    void remove_this_node( list_node *p )
17    {
18    // Следующая строка генерирует ошибку при компиляции,
19    // так как компилятор не знает, что list_node
20    // имеет сообщение remove_yourself_from_me( &root ).
21
22       p->remove_yourself_from_me( &root );
23    }
24
25 // ...
26 };
27
28 class list_node
29 {
30    linked_list *owner;
31 private:                     // Этот раздел содержит
32    friend class linked_list; // сообщения,получаемые только
33                              // от объектов linked_list
34    void remove_yourself_from_me( list_node *root )
35    {
36    // ... Выполнить удаление
37       owner->have_removed_an_element();
38    }
39 };
Листинг 9. Улучшенный вариант реализации связанного списка
1  class list_node;
2
3  class linked_list
4  {
5     int number_of_elements_in_list;
6     list_node *root;
7
8  private:
9     friend class list_node;
10    void have_removed_an_element( void );
11
12 public:
13    void remove_this_node( list_node *p );
14
15 //...
16 };
17 //========================================================
18 class list_node
19 {
20    linked_list *owner;
21 private:                // Этот раздел содержит сообщения,
22    friend class linked_list; // получаемые только от
23                              // объектов linked_list
24
25    void remove_yourself_from_me( list_node *root );
26 };
27
28 //========================================================
29 // функции класса linked_list:
30 //========================================================
31 inline void
linked_list::remove_this_node( list_node *p )
32 {
33    p->remove_yourself_from_me( &root );
34 }
35 //--------------------------------------------------------
36 inline void
linked_list::have_removed_an_element( void )
37 {
38    --number_of_elements_in_list;
39 }
40
41 //========================================================
42 // функции класса list_node:
43 //========================================================
44 void list_node::remove_yourself_from_me( list_node *root )
45 {
46 // ... Выполнить удаление
47    owner->have_removed_an_element();
48 }

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий