Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Конструкторы, виды конструкторов. Конструктор по умолчанию. Конструктор с параметрами.
Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании. Ниже перечислены основные свойства конструкторов. • Конструктор возвращает значение, даже типа void. Нельзя получить указатель на конструктор. • Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки). • Конструктор, вызываемый без параметров, называется конструктором по умолчанию. • Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значения параметров по умолчанию. Их может содержать только один из конструкторов. • Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов. В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, поскольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет. • Конструкторы не наследуются. • Конструкторы нельзя описывать с модификаторами const. virtual и static. • Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции). • Конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций: имя_класса имя_объекта [(список параметров)]; / / Список параметров не должен быть пустым имя_класса (список параметров); // Создается объект без имени (список может быть пустым) имя^класса имя_объекта = выражение; // Создается объект без имени и копируется Примеры: monstr Super(200. 300). Vas1a(50). Z: monstr X = monstr(lOOO): monstr Y = 500; В первом операторе создаются три объекта. Значения не указанных параметров устанавливаются по умолчанию. Во втором операторе создается безымянный объект со значением параметра health = 1000 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект X, в которую копируется безымянный объект. В последнем операторе создается безымянный объект со значением параметра health = 500 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект Y, в которую копируется безымянный объект. Такая форма создания объекта возможна в том случае, если для инициализации объекта допускается задать один параметр. В качестве примера класса с несколькими конструкторами усовершенствуем описанный ранее класс monstr, добавив в него поля, задающие цвет (skin) и имя (name): enum color {red, green, blue}; // Возможные значения цвета class monstr{ int health, ammo; color skin; char *name; public: monstr(int he = 100. int am =10); monstr(color sk); monstr(char * nam); int get_health(){return health;} int get_ammo(){return ammo;} }: '" //---- - -- monstr::monstr(int he, int am){ health = he; ammo = am; skin = red; name = 0; //---- - monstr::monstr(color sk)( switch (sk){ case red case green case blue } health = 100 health = 100 health = 100 ammo *= 10 ammo = 20 ammo = 40 skin = red; name = 0; break skin =* green; name = 0; break skin = blue; name = 0; break 184 Часть il. Объектно-ориентированное программирование // - monstr::monstr(char * nam){ name = new char [strlen(nam) + 1]; // К длине строки добавляется 1 для хранения нуль-символа strcpyCname. nam): health = 100: ammo =10: sk1n = red: } //---- monstr * m = new monstr ("Ork"): monstr Green (green): Первый из приведенных выше конструкторов является конструктором по умолчанию, поскольку его можно вызвать без параметров. Объекты класса monstr теперь можно инициализировать различными способами, требуемый конструктор будет вызван в зависимости от списка значений в скобках. При задании нескольких конструкторов следует соблюдать те же правила, что и при написании перегруженных функций — у компилятора должна быть возможность распознать нужный вариант. ПРИМЕЧАНИЕ Перегружать можно не только конструкторы, но и другие методы класса. Существует еще один способ инициализации полей в конструкторе (кроме использованного в приведенной выше программе присваивания полям значений формальных параметров) — с помощью списка инициализаторов, расположенных после двоеточия между заголовком и телом конструктора: monstr::monstr(1nt he. int am): health (he), ammo (am), skin (red), name (0){} Поля перечисляются через запятую. Для каждого поля в скобках указывается инициализирующее значение, которое может быть выражением. Без этого способа не обойтись при инициализации полей-констант, полей-ссылок и полей-объектов, В последнем случае будет вызван конструктор, соответствующий указанным в скобках параметрам. ПРИМЕЧАНИЕ Конструктор не может возвратить значение, чтобы сообщить об ошибке во время инициализации. Для этого можно использовать механизм обработки исключительных ситуаций.
Date: 2016-07-25; view: 452; Нарушение авторских прав |