Что делает & ldquo; использование unique_ptr & lt; class & gt; :: unique_ptr & rdquo; имею в виду? [Дубликат]

Если вы запустите label.getParent () , он вернет панель, внутри которой находится метка.

Затем вы можете вызвать parent.getName () , но тот факт, что у вас теперь будет объект, который вам может не понадобиться сейчас.

60
задан ildjarn 2 April 2012 в 19:54
поделиться

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

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

Вот подробные сведения:

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

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

  • все конструкторы без шаблонов X и
  • для каждого конструктора без шаблона для X, который имеет по крайней мере один параметр с аргументом по умолчанию, набор конструкторов, который возникает из-за отсутствия какой-либо спецификации параметра многоточия и последовательного исключения параметров с аргументом по умолчанию из конец списка параметров-типа и
  • все шаблоны конструктора X и
  • для каждого шаблона конструктора X, который имеет хотя бы один параметр с аргументом по умолчанию, набор шаблонов конструктора, который возникает из-за отсутствия какой-либо спецификации параметра эллипсиса и последовательного исключения параметров с аргументом по умолчанию из конца списка параметров-типа
80
ответ дан Ben Voigt 15 August 2018 в 23:08
поделиться
  • 1
    Э, это может быть в непрофессиональных условиях? Пример: – badmaash 2 April 2012 в 16:35
  • 2
    @Als, я просто прочитал это, но я до сих пор не понимаю, как наследование конструкторов собирается инициализировать члены данных производного класса. – badmaash 2 April 2012 в 16:49
  • 3
    @badmaash: Смотрите мой пример. По умолчанию создаются члены Ds. – Andrew Tomazos 2 April 2012 в 16:50
  • 4
    Вопрос: являются ли «конструкторы копирования» и «наследуются конструкторы»? Мои эксперименты (clang3.3) не предполагают, но я не могу найти текст, чтобы подтвердить это. – Aaron McDaid 3 November 2013 в 12:41
  • 5
    Можете ли вы расширить примеры, чтобы включить аргументы по умолчанию? – Kerrek SB 6 May 2016 в 09:32
Другие вопросы по тегам:

Похожие вопросы: