Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП лекции Раздел 4.doc
Скачиваний:
16
Добавлен:
28.09.2019
Размер:
2.56 Mб
Скачать

4.6.3. Конструкторы классов.

Среди всех методов любого класса выделяются два, которые определяют, каким образом объекты класса создаются, инициализируются, копируются и разрушаются.

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

А::А(){}; определяет его конст­руктор. Напомним, что локально декларированные объекты класса, так же как и любые локальные переменные, действительны внутри функции или блока, где они определены.

Конструкторы и деструкторы наряду с характеристиками обычных методов обладают и некоторыми уникальными свойствами:

  • Конструктор всегда имеет то же имя, что и сам класс; это же относится и к деструктору, которому, однако, предшествует символ "~" (тильда).

  • Не имеют объявлений возвращаемых значений (даже void).

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

  • Конструкторы, как и большинство функций C++, могут иметь аргументы по умолчанию или использовать списки инициализации элементов.

  • Деструкторы могут иметь атрибут virtual, а конструкторы нет.

  • Нельзя работать с их адресами.

  • Если конструкторы или деструкторы не были определены явно, они ге­нерируются компилятором.

  • Конструктор нельзя вызывать как обычную функцию; вызов деструктора возможен с полностью уточненным именем.

  • При определении и разрушении объектов вызов конструкторов и дест­рукторов осуществляется автоматически.

  • Конструкторы и деструкторы, при необходимости выделения объекту па­мяти, могут выполнять неявные вызовы операций new и delete.

Прежде чем переходить к более подробному знакомству с этими специаль­ными методами классов, рассмотрим правила, по которым происходит соз­дание/уничтожение объектов:

  • Конструкторы и деструкторы автоматически запускаются всякий раз при создании и разрушении объектов.

  • Глобальные и локальные статические объекты создаются в начале вы­полнения программы — до того, как управление попадает в функцию main (или winMain). Уничтожение таких объектов происходит в момент завершения программы в результате возврата из функции main (winMain).

  • Локальные объекты создаются, когда программа встречает их определе­ние, и уничтожаются при выходе из функции.

  • Конструктор объекта, память которому выделяется в куче (посредством операции new), вызывается автоматически, при вызове new; такой объект разрушается при явной передаче объекта в оператор delete.

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

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

Некоторые конструкторы играют особую роль.