Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2020-06-04 | 161 |
5.00
из
|
Заказать работу |
|
|
К каждому элементу класса можно обратиться с помощью указателя. Для этого определены две операции «.» и «->». Первая используется для обычных экземпляров класса, а вторая используется с указателями. Соответственно, указатели на поля и методы класса определяются по-разному.
Как и указатели на обычные функции, указатели на методы используются в том случае, когда возникает необходимость вызвать метод, идентификатор которого неизвестен. Но, в отличие от указателей на переменные или функции, указатель на метод никогда не ссылается на на определённый адрес памяти.
В целом, такие указатели можно сравнить с массивом, так как они, по большей степени, задают смещение. Конечный адрес памяти получается в результате сочетания указателя на определённый объект и указателя на метод.
Синтаксис объявления указателя имеет следующий вид:
тип_данных (идентификатор_класса:: *идентификатор_указателя)(параметры); |
Здесь «тип_данных» - это тип возвращаемого методом значения.
В качестве примера можно создать указатель на метод getHealth () ранее определённого класса Player.
Пример 9. Создание указателя на метод. <…> float (Player:: *ptrGet)(); |
Такой указатель не идентифицирует какой-то определённый метод, а указывает на аналогичные методы с одинаковой сигнатурой. Его можно использовать в качестве параметра функции, что позволит передавать в функцию идентификатор метода.
Пример 10. Передача в функцию идентификатора метода. void func(float (Player:: *ptrGet)()){ (*this.*ptrGet)(); /*вызов функции с помощью операции «.»*/ (this->*ptrGet)(); /*вызов функции с помощью операции «»->*/ } |
Также указатели могут быть настроены на конкретные методы с помощью операции «&».
Пример 11. Передача в функцию идентификатора метода. //Присваивание значения указателю ptrGetH = &Player::getHealth(); Player myHero.*ptr; ptr = new Player; //Вызов функции операцией «.» float myHealth = (myHero.ptrGetH)(); //Вызов функции операцией «->» float getHealth = (ptr->*ptrGetH)(); |
Существует несколько правил по использованию указателей:
|
Указатели на поля классов не являются обычными указателями — ведь при присваивании им значений они не ссылаются на конкретный адрес памяти, поскольку память выделяется не под классы, а под экземпляры классов.
Синтаксис определения указателя на поле класса имеет следующий вид:
тип_данных (идентификатор_класса:: *идентификатор_указателя); |
В определение указателя всегда можно включить его инициализацию. Формат инициализации, совмещённой с определением имеет следующий вид:
&идентификатор_класса:: идентификатор_поля; |
Классы. Статические элементы класса.
Как было сказано ранее, при описании полей и методов можно использовать модификатор static. Они рассматриваются как глобальные переменные или функции, доступ к которым ограничивается классом. Применяются такие поля для организации хранения данных, являющихся общими для всех экземпляров класса.
Если в своей программе Вы описываете статические поля или методы, то они будут существовать для всех экземпляров класса при этом не повторяясь. То есть они хранятся в единственном экземпляре для всех объектов.
Из всего вышесказанного следует то, что память под статические поля выделяется всего один раз при его инициализации вне зависимости от количества созданных экземпляров класса, даже если они отсутствуют. Инициализация в этом случае производится с помощью операции доступа к области действия.
Пример 12. Статические поля. class Numeric{ public: static float num; }; float Numeric:: num; /*определение в глобальной области по умолчанию инициализируются 0*/ float Numeric:: num = 70.953; /*инициализация произвольным значением*/ |
Также обратиться к статическому полю можно и через экземпляры класса:
|
Пример 13. Статические поля. class Numeric{ public: static float num; }; float Numeric fNum, *ptrNum; <…> fNum.num = 3.1416; ptrNum->num = 16; |
При определении размера объекта с помощью операции sizeof размер статического поля не учитывается.
Статические методы
Так как на статические поля распространяется действие спецификаторов доступа, то для работы с такими полями необходимы статические методы. Они могут обращаться непосредственно только к статическим полям и вызывать исключительно другие статические методы. Такие ограничения накладываются из-за того, что им не передаётся указатель this.
Обращение к таким методам не отличается от способов обращения к статическим полям. Т.е. либо с использованием идентификатора класса и оператора «::», либо с использованием идентификатора экземпляра этого класса.
Пример 14. Статические методы. <…> class Numeric{ private: static float num; public: static float getNum(){ return num; } static void setNum(float sNum){ num = sNum; } }; <…> int main(){ Numeric myNum; myNum.setNum(16); cout << myNum.getNum(); return 0; } |
|
|
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!