Наследование Конструкторов означает только это.Производный класс может неявно наследовать конструкторы от своего базового (ых) класса (ов).
Синтаксис выглядит следующим образом:
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, который имеет хотя бы один параметр с аргументом по умолчанию, набор шаблонов конструктораэто происходит в результате пропуска любой спецификации параметра с многоточием и последовательного пропуска параметров с аргументом по умолчанию в конце списка типов параметров