Создание и использование объектов класса.
Конкретные переменные типа «класс» называются экземплярами класса, или объектами. Время жизни и видимость объектов зависит от вида и места их описания и подчиняется общим правилам С++. monstr Vasia: // Объект класса monstr с параметрами по умолчанию monstr Super(200. 300): // Объект с явной инициализацией monstr stado[100]: // Массив объектов с параметрами по умолчанию monstr *beavis = new monstr (10): // Динамический объект //(второй параметр задается по умолчанию) monstr &butthead = Vasia: // Ссылка на объект При создании каждого объекта выделяется память, достаточная для хранения всех его полей, и автоматически вызывается конструктор, выполняющий их инициализацию. Методы класса не тиражируются. При выходе объекта из области действия он уничтожается, при этом автоматически вызывается деструктор. Доступ к элементам объекта аналогичен доступу к полям структуры. Для этого используются операция. (точка) при обращении к элементу через имя объекта и операция -> при обращении через указатель, например: int п = Vasid.get_ammo(); stado[5].draw; cout «beavis->get_health(); Обратиться таким образом можно только к элементам со спецификаторам public. Получить или изменить значения элементов со спецификатором private можно только через обращение к соответствующим методам. Можно создать константный объект, значения полей которого изменять запрещается. К нему должны применяться только константные методы: class monstr{ int get_health() const {return health;} }: const monstr Dead(Q,0); // Константный объект cout «Dead.get_health(); Константный метод: • объявляется с ключевым словом const после списка параметров; а не может изменять значения полей класса; • может вызывать только константные методы; • может вызываться для любых (не только константных) объектов.
Рекомендуется описывать как константные те методы, которые предназначены для получения значений полей. Создание массивов объектов. Абстрактные типы данных. Типы данных, создаваемые пользователем (программистом), называются пользовательскими типами данных. Пользовательский тип данных с полно- стью скрытой (инкапсулированной) внутренней структурой называется абст- рактным типом данных (АТД). В С++ АТД реализуется с помощью классов, в которых нет открытых чле- нов-данных, то есть вся структура этих классов скрыта от внешнего пользователя. Указатель this. Каждый объект содержит свой экземпляр полей класса. Методы класса находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов с полями именно того объекта, для которого они были вызваны. Это обеспечивается передачей в функцию скрытого параметра this, в котором хранится константный указатель на вызвавший функцию объект. Указатель this неявно используется внутри метода для ссылок на элементы объекта. В явном виде этот указатель применяется в основном для возвращения из метода указателя (return this;) или ссылки (return *this;) на вызвавший объект. Для иллюстрации использования указателя this добавим в приведенный выше класс monstr новый метод, возвращающий ссылку на наиболее здорового (поле health) из двух монстров, один из которых вызывает метод, а другой передается ему в качестве параметра (метод нужно поместить в секцию public описания класса): monstr & the_best(monstr &М){ if(health > М.health) return *this: return M: { ... monstr Vas1a(50). Super(200): // Новый объект Best инициализируется значениями полей Super: monstr Best = Vasia.the_best(Super): Указатель this можно также применять для идентификации поля класса в том случае, когда его имя совпадает с именем формального параметра метода. Другой способ идентификации поля использует операцию доступа к области видимости: void cure(int health. int ammo){ this -> health += health; // Использование this monstr:: ammo += ammo; // Использование операции:: }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|