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

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

1 ответ

Решение

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

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

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) {}

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

Вот кровавые детали:

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

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

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