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

Конструктором называется функция-член класса, имя которой совпадает с именем этого класса. Вызов конструктора указывает компилятору, что создаётся новый объект класса. Вызов конструктора может происходить как явно, так и неявно. Тело конструктора используется для инициализации данных членов класса. Создание объекта класса заключается в выделении памяти под объект и инициализации указателей на функции-члены класса. Поэтому в конструкторе можно использовать данные и функции члена класса, а также указатель this. Конструкторы должны удовлетворять следующим требованиям:

  1. конструктор не может возвращать значения;

  2. конструктор не может быть объявлен с квалификаторами const или volatile;

  3. конструктор не может быть объявлен со спецификатором static;

  4. конструктор не может быть объявлен со спецификатором virtual;

Из 1-го условия следует, что поскольку конструктор не может возвращать значение, постольку для обработки ошибок в инструкторе должны использоваться исключения.

Если членом класса является константа, ссылка или объект другого класса, то инициализация такого члена класса невозможна в теле конструктора. В этих случаях используют список инициализаций данных-членов класса, которые записываются после списка параметров конструктора и отделяются от него символом «:». Список инициализаций должен содержать вызовы конструктора для инициализируемых объектов. В списке инициализаций могут инициализироваться и другие данные-члены класса.

  1. Конструктор по умолчанию.

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

  1. без параметров;

  2. со списком параметров, в котором все параметры имеют значения по умолчанию.

Класс может иметь только один конструктор по умолчанию. Если класс совсем не имеет конструкторов и не содержит ссылок и констант в качестве членов класса, то конструктор по умолчанию генерируется компилятором. Этот конструктор имеет вид:

public: inline имя_класса ();

Inline означает, что тело функции или тело конструктора встроено в интерфейс класса.

Если класс имеет хотя бы 1 конструктор, то конструктор по умолчанию не генерируется компилятором и его должен определить разработчик класса. Чтобы запретить использование конструктора по умолчанию, его нужно поместить в раздел класса private. Это предотвращает возможность создания неинициализированных объектов.

  1. Конструктор копирования.

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

Если конструктор копирования не определён, то компилятор сам генерирует конструктор копирования по умолчанию, имеющий следующий прототип:

public: inline имя_класса (const имя_класса &);

В этом случае он выполняет почленное копирование данных членов из объектов аргумента конструктора в конструируемый объект. Из этого следует, что если в конструкторе копирования выполняется тривиальное копирование членов данного класса, то такой конструктор копирования можно не определять.

Конструктор копирования вызывается явно в случае явной инициализации объекта другим объектом этого же класса. Конструктор копирования вызывается неявно в 3-х случаях:

  1. при инициализации объекта другим объекта этого же класса при помощи операции присваивания;

  2. при передаче объекта в тело функции по значению;

  3. при возврате объекта из функции по значению.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]