2011-12-17 4 views
4

комплекс наследования Если мы предположим, что мы имеем эту иерархию классов: A < - B < - C. У меня есть следующие вопросы:По умолчанию конструктор копирования и иерархии

1) Если я реализовать конструктор копирования в B, Должен ли я вызвать конструктор копирования A в реализации B?

2) Будет ли конструктор копирования по умолчанию в C вызвать конструктор копирования, который я реализовал в B?

+3

Правильный ответ, без сомнения, просачивается, когда я пишу этот комментарий. Тем не менее, я чувствую, что мне нужно указать, что (полис времени выполнения) и семантика копии обычно не подходят хорошо или вообще. – sbi

+1

¤ Re (1), да, вы должны называть его, если хотите, чтобы он был выполнен. В противном случае, поскольку вы определяете конструктор копии B, он автоматически вызовет конструктор по умолчанию или не будет компилироваться, если этот вызов будет неоднозначным. Re (2), будет ли конструктор копии по умолчанию вызывать конструктор копирования, который вы реализовали в непосредственном базовом классе B, да/если/компилятор может сгенерировать конструктор копии по умолчанию (то есть в тех случаях, когда вопрос имеет смысл). Однако имейте в виду, что, например, 'T (T &)' также формально является конструктором копирования ... Cheers & hth., –

ответ

4
  1. Не обязательно, но это хорошая практика. Он не будет вызываться автоматически. Вы также можете вызвать другой конструктор (или нет, и в этом случае вызывается конструктор по умолчанию) и делать то, что вы хотите, хотя идиоматично вызывать конструктор базовой копии.

  2. Да, это будет.

+0

Большое спасибо за ваш ответ. Это очень ясно. – benlaug

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