Виклик Опції h2>
Виклик функції, то є запис вираз (спісок_вираженій),
можна проінтерпретувати як бінарну операцію, і операцію виклику можна
перевантажувати так само, як і інші операції. Список параметрів функції operator ()
обчислюється і перевіряється у відповідність зі звичайними правилами передачі
параметрів. Перевантажуються функція може виявитися корисною головним чином для
визначення типів з єдиною операцією і для типів, у яких одна операція
настільки переважає, що інші в більшості ситуацій можна не брати до
увагу. p>
Для типу асоціативного масиву assoc ми не визначили
ітератор. Це можна зробити, визначивши клас assoc_iterator, робота якого
полягає в тому, щоб у певному порядку постачати елементи з assoc.
Ітератор потрібен доступ до даних, які зберігаються в assoc, тому він зроблений
іншому: p>
class assoc ( p>
friend class assoc_iterator; p>
pair * vec; p>
int max; p>
int free; p>
public: p>
assoc (int); p>
int &
operator [] (char *); p>
); p>
ітератор визначається як p>
class assoc_iterator ( p>
assoc * cs;// поточний масив assoc p>
int i;// поточний індекс p>
public: p>
assoc_iterator (assoc & s) (cs = &s; i = 0;) p>
pair *
operator ()() p>
(return
(ifree)? & cs-> vec [i + +]: 0;) p>
); p>
Треба ініціалізувати assoc_iterator для масиву assoc,
після чого він буде повертати покажчик на нову pair з цього масиву всякий
раз, коли його будуть активізувати операцією (). Після досягнення кінця масиву
він повертає 0: p>
main ()//
вважає входження кожного слова у введенні p>
( p>
const MAX =
256;// більше найбільшого слова p>
char buf [MAX]; p>
assoc
vec (512); p>
while
(cin>> buf) vec [buf ]++; p>
assoc_iterator
next (vec); p>
pair * p; p>
while (p =
next ()) p>
cout
< name << ":" < val <<
"n"; p>
) p>
ітераторні тип подібне до цього має перевагу перед
набором функцій, які виконують ту ж роботу: у нього є власні
закриті дані для зберігання ходу ітерації. До того ж зазвичай істотно, щоб
одночасно могли працювати багато ітераторів цього типу. p>
Звичайно, таке застосування об'єктів для представлення
ітераторів ніяк особливо з перевантаженням операцій не пов'язано. Багато хто любить
використовувати ітератори з такими операціями, як first (), next () та last ()
(перший, наступний і останній). p>
Список літератури h2>
Для підготовки даної роботи були використані матеріали
з сайту http://www.realcoding.net
p>