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