2014-09-16 3 views
2

У меня возник вопрос о конструкторах копирования.Можем ли мы передать параметры конструктору копирования в C++

Конструктор, определенный ниже, назовем его конструктором копирования или просто перегруженным конструктором?

A(const A& obj,int x, char y='A')

+1

Если это определено как в вашем вопросе, то нет, это не экземпляр-конструктор, это просто нормальный перегруженный конструктор. Конструктор копирования принимает только один единственный аргумент, экземпляр объекта для копирования. –

+0

Нет, этот конструктор не будет квалифицироваться как конструктор копирования. – juanchopanza

+3

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

ответ

7

Конструкторы копирования определяются таким образом:

C++ 11 12,8/2: Конструктор не-шаблон для класса X является конструктор копирования, если ее первый параметр имеет тип X&, const X&, volatile X& или const volatile X&, либо других параметров нет, либо все остальные параметры имеют аргументы по умолчанию

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

Ваш пример не соответствует этому требованию, поскольку он имеет два обязательных параметра. Если второй параметр имел значение по умолчанию:

A(const A& obj, int x=42, char y='A') 

тогда это был бы экземпляр-конструктор.

+0

Ну, «вызываемый с помощью одного аргумента» не является определяющим критерием. Это определение для конструктора по умолчанию, но не для конструктора копирования. 'T (...)' является конструктором по умолчанию, но 'T (T const &, ...)' не является конструктором копирования, как я вижу. Отказ от ответственности: грипп. –

+0

@ Cheersandhth.-Alf: Действительно, «вызываемый с помощью одного аргумента» необходим, но не обязательно достаточный. Определяющие критерии приведены в стандартной цитате, а не в моем общем (английском) резюме. –

Смежные вопросы