logo search
Производные классы в C++

3. Конструкторы производных классов

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

Параметры конструктора базового класса указываются в определении конструктора производного класса. Вызов конструктора базового класса следует непосредственно после имени конструктора производного класса, перед открывающей фигурной скобкой.

class Level0 {

private: int a;

protected: int b;

public: int c;

void f0();

Level0(int v0) {

a = b = c = v0;

}

};

class Level1: public Level0 {

private: int d;

protected: int e;

public: int f;

void f1();

Level1(int v0, int v1): Level0(v0) {

d = e = f = v1;

}

};

// Общая функция

void fn() {

Level0 L0(1);

Level1 L1(1,2);

Конструктор производного класса может инициализировать protected- и public-компоненты базового класса, не выполняя вызова конструктора. C++ вызывает конструктор по умолчанию базового класса, если этого не делает сам конструктор производного класса.

Следующий фрагмент программы даст тот же результат, что и предыдущее определение конструктора.

Level1(int v0, int v1): (v0) { // по умолчанию - Level(v0)

d = e = f = v1;

}

Конструкторы объемлемых (см. следующий параграф) классов можно вызывать в той же строке, что и конструктор базового класса. Следующий конструктор Level1 эквивалентен двум предыдущим:

Level1(int v0, int v1): Level(v0),d(v1),e(v1),f(v1) { }