Поделиться через


Правила объявление конструкторов

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

class-name  (  argument-declaration-list  )

Заметки

argument-declaration-list могут быть пустыми.

C++ определяет 2 специальных типа конструкторов, значения по умолчанию и конструкторов копии, описанных в следующей таблице.

Конструкторы по умолчанию и копий

тип конструкции

Аргументы

Назначение

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

Может быть вызван без аргументов

Постройте по умолчанию объект типа класса

Скопируйте конструктор

Может принимать один аргумент ссылок к одному и тому же типу класса

Скопируйте объекты типа класса

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

Если не указывать какие-либо конструкторы, то компилятор пытается создать конструктор по умолчанию.Если не предоставить конструктор копии, компилятор пытается сформировать его.Эти созданные компилятором учетной записи функции-членами открытых конструкторов.Формируется ошибка при указании конструктор копий с первым аргументом, который является объектом, а не ссылки.

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

Компилятором конструктором копии настраивает новый объект memberwise и выполняет копирование содержимого объекта для копирования.Если конструкторы базового класса или члена существуют, то они называются; в противном случае битовая выполняется копирование.

Если все базовые классы и членов класса тип иметь конструкторы копирования, которые принимают a Const аргумент компилятором конструктором копии принимает один аргумент типа Const тип&.В противном случае компилятором конструктором копии принимает один аргумент типа тип&.

Можно использовать конструктор для инициализации a Const OR volatile объект, но сам не могут быть объявлены как конструктор Const OR volatile.Единственный допустимый класс хранения для конструктора Встроенная; использование любого другого модификатора хранени-класса, включая __declspec ключевое слово с конструктором вызывает ошибку компилятора.

Соглашение о вызове stdcall используется для функций и глобальных статических функций, объявленных с элемента __stdcall ключевое слово, и не используют список аргументов переменной.При использовании __stdcall ключевое слово в non-статическом функции-члене, как конструктор, компилятор будет использовать соглашение о вызовах thiscall».

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

См. также

Ссылки

Конструкторы (C++)