Наследовавшиеся конструкторы

199
задан Rohit Vipin Mathews 6 March 2012 в 19:39
поделиться

3 ответа

Если Ваш компилятор поддерживает C++ 11 стандартов, существует наследование конструктора с помощью using (предназначенная игра слов). Поскольку больше видит C++ Википедии 11 статей . Вы пишете:

class A
{
    public: 
        explicit A(int x) {}
};

class B: public A
{
     using A::A;
};

Это все или ничего - Вы не можете наследовать только некоторых конструкторов, если Вы пишете это, Вы наследовали всех их. Для наследования только выбранных, необходимо записать отдельным конструкторам вручную и вызвать основного конструктора по мере необходимости от них.

Исторически конструкторы не могли быть наследованы в C++ 03 стандарта. Необходимо было наследовать их вручную один за другим путем вызова базового внедрения самостоятельно.

357
ответ дан Suma 23 November 2019 в 05:09
поделиться

Конструкторы не наследованы. Их называет неявно или явно дочерний конструктор.

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

class A
{
public: 
    explicit A(int x) {}
};

class B: public A
{
public:
    explicit B(int x) : A(x) { }
};

ОБНОВЛЕНИЕ : В C++ 11, могут быть наследованы конструкторы. См. ответ Suma для деталей.

85
ответ дан nijoakim 23 November 2019 в 05:09
поделиться

Необходимо явно определить конструктора в B и явно вызвать конструктора для родителя.

B(int x) : A(x) { }

или

B() : A(5) { }
7
ответ дан Evan Teran 23 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

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