Что такое наследование конструктора?

В С++ 11, что подразумевается под наследованием конструктора? Если это то, что я думаю (конструктор базового класса входит в сферу производного класса), каковы его последствия для моего кода? Каковы приложения такой функции?

Ответ 1

Наследование конструкторов означает именно это. Производный класс может неявно наследовать конструкторы из своего базового класса (es).

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

struct B
{
    B(int); // normal constructor 1
    B(string); // normal constructor 2
};

struct D : B
{
    using B::B; // inherit constructors from B
};

Итак, теперь D имеет неявно определенные конструкторы:

D::D(int); // inherited
D::D(string); // inherited

Члены Ds по умолчанию сконструированы этими наследуемыми конструкторами.

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

D::D(int x) : B(x) {}
D::D(string s) : B(s) {}

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

Вот детали gory:

12.9 Наследование конструкторов

1) Использование-декларация, которая называет конструктор, неявно объявляет набор наследующих конструкторов. Набор кандидатов в наследство конструкторы из класса X, указанные в объявлении using, фактических конструкторов и условных конструкторов, которые являются результатом преобразование дефолтных параметров следующим образом:

  • все конструкторы без шаблонов X и
  • для каждого конструктора без шаблона X, который имеет по крайней мере один параметр с аргументом по умолчанию, набор конструкторов, который приводит к исключению любой спецификации параметра эллипсиса и последовательно исключая параметры с аргументом по умолчанию от конца списка параметров-типа и
  • все шаблоны конструктора X и
  • для каждого шаблона конструктора X, который имеет по крайней мере один параметр с аргументом по умолчанию, набор шаблонов конструктора, который приводит к от опускания любой спецификации параметра многоточия и последовательно опуская параметры с аргументом по умолчанию с конца Параметр-типа список