Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Инициализация полей объектов
При объявлении полей класса не допускается их инициализация, поскольку в момент описания поля память для его размещения еще не выделена. Выделение памяти осуществляется не для класса, а для объектов этого класса. Поэтому возможность инициализации полей появляется после объявления данного класса. Значение может заноситься в поле объекта во время выполнения программы несколькими способами: · присваиванием значения полю объекта · внутри любой компонентной функции используемого класса · согласно общим правилам C++ с использованием оператора инициализации. Эти правила применимы только для инициализации общедоступных полей, описанных в секции public. Инициализация полей, описанных в секциях private и protected возможно только с помощью компонентной функции. Пример 1 Пример метода, определенного в другом месте программы с помощью операции доступа к области видимости (::) Void monstr::draw(int x, int y, int scale, int position) { <тело метода> } Пример 2 Пример описания метода, определенного как встроенный вне класса с пометкой директивы inline. inline int monstr::get_ammo() { return ammo; } Пример 3 Примеры доступа к элементам объекта аналогично доступу к полям структуры. Для обращение через имя объекта -> – через указатель int n=Vasia.get_ammo(); stdio[5].draw(10,10,1,1); cout<<beavis-> get_health(); В случае, когда обращаются к const объекту, к нему применяется только const методы. Объект типа const (константный объект)- объект, значение полей которого изменять запрещено. Пример 4 Class monstr {… int get_health() const {return health;} }; const monstr Deaf(0,0); /* константный объект */ cout<<Dead.get_health();
Конструкторы В C++ предназначены специальные методы для инициализации объектов - конструкторы. Они выполняются автоматически при создании объекта. Конструктор имеет то же самое имя, что и класс и обладает следующими свойствами: · конструктор не возвращает значения, даже типа void; нельзя получить указатель на конструктор · класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется перегрузка) · конструктор может не иметь параметров, тогда это конструктор по умолчанию · параметры конструктора могут иметь любой тип, кроме типа этого же класса; можно задавать значения по умолчанию, но их может содержать только один конструктор
· если не указано ни одного конструктора, будет вызван конструктор по умолчанию. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов. В случае, когда класс содержит константы или цифры, при попытке создания объекта класса будет выдана ошибка, так как их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет · конструкторы не наследуются · конструкторы нельзя записать с модификаторами: const, virtual, static · конструкторы глобальных объектов вызываются до вызова функции main В иерархии классов конструкторы выполняются в порядке их "классового происхождения". Локальные объекты создаются, как только становятся активными области памяти конструктор записывается при создании временного объекта, например при передаче объекта из функции. Как и любая другая компилируемая функция, конструктор может быть переопределенным, указыв. конкретные данные для различных списков параметров. Этот способ, как правило, применяется для инициализации полей объектов. В последнем случае будет вызван конструктор, соответствующий указанным в скобках параметрам. Конструктор не может сообщать значение, чтобы сообщить об ошибке во время инициализации. Конструктор копирования Конструктор копирования - специальный вид конструктора, получающий в качестве единственного параметра указатель на объект того же класса. T::T(const T&) { /* Тело конструктора */ } Конструктор вызывается, когда новый объект создается путём копирования существующего: · при передаче нового объекта с инициализацией другим объектом · при передаче объекта в функцию по значению · при возврате объекта из функции. Конструктор копирования выполняет поэлементное копирование полей. В случае, когда в классе есть указатели или ссылки, использование конструктора копирования будет неправильным.
Пример 1 monst::monstr(const monstr&M) { if(M.name) { name = new char[strlen(M.name)+1]; strcpy(name, M.name); } else name = 0; health = M.health; ammo = M.ammo; skin = M.skin; }
В конструкторах может использоваться список инициализации, который отделяется от заголовка конструктора символом «:» и состоит из записей вида: <имя>(<список выражений>), где в качестве имени может быть использовано:
имя поля данного класса имя объекта другого класса, включенного в данный класс имя базового класса Список выражений определяет значения, использованные для инициализации объекта. Чаще всего конструктор со списком инициализации применяется для задания назначенных значений объекта, в котором используются фиксированные и ссылочные поля, являющиеся объектами других, ранее определенных классов. Иногда возникает необходимость создать объект, не инициализируя его поля. Такой объект называется неинициализированным и под него только резервируется память. Для создания такого объекта используется неинициализирующий конструктор. У такого конструктора нет списка параметров и отсутствует тело. В этом случае значения полей объекта не определяются. Пример 2 /* Создается объект без имени и копируется */ monst Super(200, 300), Vasia(50), z; monst x=monstr(1000); monst y=500; lnum color{red, green, blur} /* возможные значения цветов */ Class monstr { int health, ammo; color skin; char *name; public: monstr(in the = 100, int am = 10); monstr(color 5k); monstr(char * name); int get_health() {return health;} int get_ammo() {return ammo;} };
|
||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 50; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.147.87 (0.009 с.) |