2015-01-14 4 views
0

Есть ли какое-либо преимущество в вызове родительского конструктора явно в конструкторе производного класса?вызов родительского конструктора C++

это:

LockableDoor :: LockableDoor() : Door(), locked_(true) { } 

отличается от этого:

LockableDoor :: LockableDoor() : locked_(true) { } 

каким-то образом?

ответ

3

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

1

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

+6

Я не согласен со вторым утверждением. Я предпочитаю, чтобы у меня не было этого, он ничего не мешает коду, так как вы упомянули, что компилятор вызовет его для нас. – Borgleader

0

Это не совсем так, но ответ на ваш вопрос - да, иногда бывает полезно вызвать родительские конструкторы. Это тот случай, когда вы хотите вызвать нечто иное, чем конструктор без аргументов (особенно если у вас нет ни одного из них):

A::A(int) {} 
B::B(int i): A(i) {}  // derived from A 
+1

В некоторых случаях это не просто выгодно, но необходимо (если, например, по умолчанию ctor недоступен) – Borgleader

Смежные вопросы