|
Программирование >> Дополнительные возможности наследования
Рекомендуется Используйте указатели на функции-члены для вызова методов в объектах класса. Используйте typedef, чтобы упростить объявление указателя на функцию-член. Не рекоменууется Не злоупотребляйте созданием указателей на функции-члены, если без них можно обойтись. Резюме Сегодня вы познакомились с созданием статических переменных-членов класса, которые, в отличие от обычных переменных-членов, принадлежат всему классу, а не отдельному объекту. Если статическая переменная-член объявлена как public, то обратиться к ней можно просто по имени, даже не используя объектов класса, которому принадлежит эта переменная. Статические переменные-члены можно использовать в качестве счетчиков объектов класса. Поскольку они не являются частями объектов, при их объявлении не происходит автоматическое резервирование памяти, как при объявлении обычных переменных-членов. Поэтому в профамме за пределами объявления класса обязательно должна быть строка, в которой происходит определение и инициализация статической переменной-члена. Статические функции-члены также принадлежат всему классу, подобно статическим переменным-членам. Вызвать статическую функцию-член класса можно даже в том случае, если не было создано ни одного объекта этого класса. Сами же эти функции могут использоваться для открытия доступа к статическим переменным-членам. Поскольку статические переменные-члены не имеют указателя this, они не могут использовать обычные переменные-члены. Из-за отсутствия указателя this статические функции-члены не могут объявляться как const. Дело в том, что при объявлении функции-члена со спецификатором const устанавливается, что указатель this этой функции является константным. Кроме того, вы узнали, как объявлять и использовать указатели на обычные функции и на функции-члены, а также познакомились с созданием массивов этих указателей и с передачей указателей на функции в другие функции. Как указатели на функции, так и указатели на функции-члены могут использоваться для создания таблиц функций, что облегчает управление их вызовом в процессе выполнения профаммы. Это придает профамме гибкость и делает профаммный код более читабельным. Вопросы U ответы Зачем использовать статические данные, если есть глобальные? Область видимости статических данных офаничивается классом. Обращаться к статической переменной-члену следует из объектов класса, либо из внещнего кода профаммы, явно указав имя класса (в случае, если статическая переменная-член описана как public), либо с помощью открытой статической функции-члена этого класса. Статические переменные-члены относятся к типу данных того класса, которому они принадлежат. Ограничение доступа к членам класса, вызванное строгим контролем за типом данных в С++, делает использование статических переменных-членов более безопасным по сравнению с глобальными данными. Зачем использовать статические функции-члеиы, если можно воспользоваться глобальными функциями? Статические функции-члены принадлежат классу и могут вызываться только с помощью объектов класса или с явным указанием имени класса, например: ClassName::FunotionName(). Насколько часто в программах используются указатели на функции и указатели на функции- члены? Такие указатели используются достаточно редко. Это дело вкуса программиста. Даже в сложных и мощных программах без них можно вполне обойтись. Коллоквиум в этом разделе предлагаются вопросы для самоконтроля и укрепления полученных знаний и приводится несколько упражнений, которые помогут закрепить ващи практические навыки. Попытайтесь самостоятельно ответить на вопросы теста и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г. Не приступайте к изучению материала следующей главы, если для вас остались неясными хотя бы некоторые из предложенных ниже вопросов. Контрольные вопросы 1. Могут ли статические переменные-члены быть закрытыми? 2. Объявите статическую переменную-член. 3. Объявите статическую функцию. 4. Объявите указатель на функцию, принимающую параметр типа int и возвращающую значение типа long. 5. Измените указатель, созданный в задании 4, на указатель на функцию-член класса Саг. 6. Объявите массив из десяти указателей, созданных в задании 5. Упражнвння 1. Напищите короткую программу, объявляющую класс с одной обычной переменной-членом и одной статической переменной-членом. Создайте конструктор, выполняющий инициализацию переменной-члена и приращение статической переменной-члена. Затем опищите деструктор, который уменьшает на единицу значение статической переменной. 2. Используя программный блок из упражнения 1, напищите короткую выполняемую программу, которая создает три объекта, а затем выводит значения их переменных-членов и статической переменной-члена класса. Затем последовательно удаляйте объекты и выводите на экран значение статической переменной-члена. 3. Измените программу упражнения 2 таким образом, чтобы доступ к статической переменной-члену осуществлялся с помощью статической функции-члена. Сделайте статическую переменную-член закрытой. 4. Создайте в программе упражнения 3 указатель на функцию-член для доступа к значению нестатической переменной-члена и воспользуйтесь им для вывода этих значений на печать. 5. Добавьте две дополнительные переменные-члена к классу из предыдущих заданий. Добавьте методы доступа, возвращающие значения всех этих переменных. Все функции-члены должны возвращать значения одинакового типа и иметь одинаковую сигнатуру. Для доступа к этим методам используйте указатель на функцию-член.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |