260______________________________Часть II. Программирование на C++
19: "Адрес статической функции-члена: " « a.ObjectAddress « endl;
20: cout « "Адрес объекта " « b.name « " : " « &Ь « endl « 21: "Адрес статической функции-члена: " « b.ObjectAddress « endl;
22: }
Совет
У классов и структур C++ много общего. Хотя классы являются более предпочтительным средством, структуры в C++ также поддерживаются, и, более того, могут иметь функции-члены, конструкторы и деструкторы. Чтобы узнать все о различиях между классами и структурами, прочтите главу 14 "Базовые концепции классов".
Строка 6 содержит объявление статической функции-члена (функция-член — это элемент группы: структуры или класса). Выводимые на экран значения со всей очевидностью демонстрируют, что адреса двух объектов различны, но адреса их статических элементов совпадают. Таким образом, в контексте структур и классов ключевое слово static используется для указания того, что соответствующая функция может существовать в одном и только в одном физическом экземпляре — одном на все объекты этого типа.
Совет
Статические функции-члены дают уникальную возможность логически соединять объекты одного класса. Этот прием эффективно используется в весьма сложных задачах построения списков и деревьев.
Уместно делать статическими те функции, которые оперируют с элементами класса вне зависимости состояния каждого отдельного объекта. Например, функция Swap будет менять местами два элемента абсолютно независимо от их значений.
Замечание
C++, в отличие от других языков, требует определенной дисциплины. Возьмем для примера функцию Swap. Она может быть встраиваемой функцией. Кроме того, Swap можно сделать функцией-шаблоном (см. главу 19 "Классы-шаблоны"). Помимо этого, Swap может быть глобальной функцией или функцией-членом.
Нередко, реализовав какую-либо идею, вы через некоторое время натыкаетесь на более элегантное решение. C++ приветствует метод последовательных приближений в разработке программ, что, к сожалению, разительно расходится с ожиданиями вашего начальства.
Спецификатор extern
Ключевое слово extern в применении к функции означает, что эта функция определена в каком-то другом месте. Это "другое место" может находиться в том же модуле, но ниже, или в другом модуле. Использование extern в традиционной манере