О базовом классе при инициализации производного класса

#c #constructor

#c #constructor

Вопрос:

ребята. Я вижу несколько случаев, подобных:

 class Derived:public Base{

public:
    Derived(...):Base(...){}
}
  

В какой ситуации или есть ли какой-либо принцип, согласно которому мы должны явно инициализировать базу в списке инициализации производного ctor? Спасибо

Комментарии:

1. В качестве резюме, вызов базового ctor с аргументами и назначение конкретного ctor являются обычным использованием для его отображения в списке инициализации.

Ответ №1:

Если вы хотите вызвать базовый конструктор с аргументами.

Комментарии:

1. конструктор, который принимает аргументы, не обязательно является конструктором «не по умолчанию».

2. Упс … почему-то я не могу отдать вам свой голос… здесь говорится, что вы должны отредактировать его один раз!

Ответ №2:

В случае, если нам нужно передать аргументы производного конструктора базовому конструктору, его можно использовать.

 class foo
{
    public:
        foo() {} 
        foo( int num ) {}
};

class bar : public foo
{
    public:
        bar(int barNum): foo(barNum) {}
};
  

Ответ №3:

Если не инициализировать базовый класс явно, будет вызван конструктор по умолчанию.

Ответ №4:

Если в вашем базовом классе есть несколько конструкторов (в основном точка входа), у вас есть выбор вызвать любой из них.

Ответ №5:

Хороший стандарт кодирования рекомендует вам всегда инициализировать базовый класс в списке инициализации конструктора.

Если конструктору базового класса требуются некоторые аргументы, то вам придется это сделать.