Что такое наследование конструктора? - PullRequest
63 голосов
/ 02 апреля 2012

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

1 Ответ

82 голосов
/ 02 апреля 2012

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

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

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