В С++ 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, который имеет по крайней мере один параметр с аргументом по умолчанию, набор шаблонов конструктора, который приводит к от опускания любой спецификации параметра многоточия и последовательно опуская параметры с аргументом по умолчанию с конца Параметр-типа список