Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мини конспект по ООП.doc
Скачиваний:
34
Добавлен:
25.03.2015
Размер:
241.66 Кб
Скачать

12. Что называется конструктором по умолчанию? Конструктором преобразования?

Конструктор, вызываемый без параметров, называется конструктором по умолчанию.Параметры, задаваемые по умолчанию, может содержать только один из конструкторов.

Пример класса, содержащего несколько конструкторов:

enum color {red, green, blue} // возможные значения цвета

class monstr

{

int health, ammo;

color skin;

char *name;

public:

monstr(in the=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: health=100; ammo=10; skin=red; name=0; break;

case green: health=100; ammo=20; skin=green; name=0; break;

case blue: health=100; ammo=40; skin=blue; name=0; break;

}

}

// ------------------------------------

monstr::monstr(char *nam)

{

name=new char[strlen(nam)+1]; // длина строки +1 для хранения нуль-символа

strcpy(name, nam);

health=100; ammo=10; skin=red;

}

// ------------------------------------

monstr *m=new monstr("Ork");

monstr Green(green);

Первый конструктор в данном примере является конструктором по умолчанию, так как его можно вызвать без параметров.

При инициализации объектов класса monstrтребуемый конструктор будет вызван в зависимости от списка значений в скобках (компилятор распознает нужный вариант).

Конструктор преобразованияэто конструктор класса, принимающий один параметр какого-либо другого типа, то есть осуществляющий преобразование из типа параметра в тип этого класса.

13. Основные свойства и правила использования конструкторов.

Основные свойства и правила использования конструкторов:

– конструктор имеет то же имя, что и класс, в котором он объявляется;

– конструктор не возвращает значения (даже типа void);

– в программе невозможно получить адрес конструктора (указатель на конструктор);

– класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации;

– конструктор класса Х не может иметь аргумент типа Х;

– конструктор класса Х может иметь аргумент типа X& (ссылку на объект типа Х);

– конструктор может иметь аргументы, заданные по умолчанию;

– конструктор по умолчанию – это конструктор, который может быть вызван без аргументов;

– если конструктор не задан в программе, он будет автоматически сгенерирован компилятором для построения соответствующих объектов. Такой конструктор вызывает конструкторы по умолчанию для полей классов и конструкторы по умолчанию базовых (родительских) классов. Если класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, так как их необходимо инициализировать конкретными значениями, что невозможно для конструктора по умолчанию. Все конструкторы, сгенерированные таким образом, имеют атрибут public;

– конструктор вызывается автоматически только при описании объекта;

– конструктор – это функция, но он не может быть виртуальным (его нельзя объявить с ключевым словом virtual);

– конструкторы нельзя описывать с модификаторами constиstatic;

– объект, содержащий конструктор, нельзя включить в виде компонента в объединение (union);

– конструктор не наследуется в производных классах. Если необходимо, то конструктор производного класса может вызывать конструкторы для его базовых (родительских) классов;

– конструктор, заданный в виде Х::Х&(const X&), называется конструктор копирования класса Х;

– для конструктора работает механизм доопределения имени. Например, можно рассмотреть конструкторы X::X(int), X::X(float)и т.п.;

– конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).