Случайный афоризм
Перефразируя Ренара: очень известный в прошлом месяце писатель. Бауржан Тойшибеков
 
новости
поиск по автору
поиск по тематике
поиск по ключевому слову
проба пера
энциклопедия авторов
словарь терминов
программы
начинающим авторам
ваша помощь
о проекте
Книжный магазин
Главная витрина
Книги компьютерные
Книги по психологии
Книги серии "Для чайников"
Книги по лингвистике
ЧАВо
Разные Статьи
Статьи по литературе

Форма пользователя
Логин:
Пароль:
регистрация
 детектив



 драмма



 животные



 история



 компьютерная документация



 медицина



 научно-популярная



 очередная история



 очерк



 повесть



 политика



 поэзия и лирика



 приключения



 психология



 религия



 студенту



 технические руководства



 фантастика



 философия и мистика



 художественная литература



 энциклопедии, словари



 эротика, любовные романы



в избранноеконтакты

Параметры текста
Шрифт:
Размер шрифта: Высота строки:
Цвет шрифта:
Цвет фона:

      // ...
  }

Функция print_employee() теперь не нужна, поскольку ее место заняли
функции члены  print(), и теперь со списком служащих можно работать
так:

  void f(employee* ll)
  {
      for (; ll; ll=ll->next) ll->print();
  }

Каждый служащий  будет  печататься  в  соответствии  с  его  типом.
Например:

  main()
  {
      employee e;
          e.name = "Дж.Браун";
          e.department = 1234;
          e.next = 0;
      manager m;
          m.name = "Дж.Смит";
          e.department = 1234;
          m.level = 2;
          m.next = &e;
      f(&m);
  }

выдаст

  Дж.Смит 1234
          уровень 2
  Дж.Браун 1234

  Заметьте, что это будет работать даже в том случае, если f() была
написана и  откомпилирована еще  до  того,  как  производный  класс
manager был  задуман!  Очевидно,  при  реализации  этого  в  каждом
объекте класса  employee сохраняется  некоторая информация  о типе.
Занимаемого для  этого пространства  (в текущей реализации) как раз
хватает для  хранения указателя. Это пространство занимается только
в объектах  классов с виртуальными функциями, а не во всех объектах
классов и  даже не во всех объектах производных классов. Вы платите
эту пошлину  только за  те классы,  для которых описали виртуальные
функции.

                             - стр 210 -

  Вызов функции с помощью операции разрешения области видимости ::,
как это  делается в  manager::print(),  гарантирует,  что  межанизм
фиртуальных функций  применяться не  будет. Иначе  manager::print()
подвергалось бы  бесконечной рекурсии. Применение уточненного имени
имеет еще  один эффект,  который  может  оказаться  полезным:  если
описанная как  virtual функция  описана еще  и как  inline  (в  чем
ничего необычного  нет), то  там, где в вызове применяется :: может
применяться inline-подстановка.  Это дает  программисту эффективный
способ справляться с теми важными специальными случаями, когда одна
виртуальная функция  вызывает другую для того же объекта. Поскольку
тип объекта  был определен  при вызове  первой виртуальной функции,
обычно его  не надо  снова динамически определять другом вызове для

1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 97 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : 163 : 164 : 165 : 166 : 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 : 194 : 195 : 196 : 197 : 198 : 199 : 200 : 201 : 202 : 203 : 204 : 205 : 206 : 207 : 208 : 209 : 210 : 211 : 212 : 213 : 214 : 215 : 216 : 217 : 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : 226 : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : 240 : 241 : 242 : 243 : 244 : 245 : 246 : 247 : 248 : 249 :
главная наверх

(c) 2008 Большая Одесская Библиотека.