2014-12-08 2 views
0

Я работаю над большим проектом, и на протяжении всего кода мы имеем классы typedef базового класса и вызываем его конструктор в списке инициализаторов. Почему это? Я привел пример, показывающий, что обычно делается. Насколько я могу судить, никакой разницы в конструкторах не произошло. Какая польза? Я попробовал Google, но не дал никаких результатов.Конструктор Baseclass, неявно называемый

#include <stdio.h> 

class A 
{ 
    public: 
    A() 
    { 
     printf("A Constructed\n"); 
    } 
}; 

class B : public A 
{ 
    public: 

    typedef A super; 

    B() 
    :super() 
    { 
     printf("B Constructed\n"); 
    } 
}; 

int main() 
{ 
    B b; 

    return 0; 
} 
+1

_ «? Что такое преимущество» _ То, что Вы можете рассчитывать на это делаются :-P ... –

+0

Но конечно, он бы назвал конструктор базового класса? Не так ли? Разве это не так, как работает стандарт C++? – marsh

+0

Вы спрашиваете, почему был вызван конструктор 'A'? Или вы спрашиваете, почему они переименовывают 'A' как' super'? –

ответ

0

класс A является частью класса B.

Это привело бы к очень неустойчивому коду, если конструктор до A не вызывался при создании экземпляра B. (Например, все данные элемента из A будут неинициализированы).

может указать, какой конструктор A использовать, если вам нужно, хотя, используя инициализатор базового элемента.

В вашем случае, используя Инициализатор базового элемента лишний: вы могли бы написать

B() 
{ 
    printf("B Constructed\n"); 
} 
+0

Что я не понимаю, так это базовый класс? Конструктор базового класса будет вызван в любом случае? Printf был таким же до и после добавления этого конструктора? Почему они добавляют его вручную, а не позволяют автоматически его выполнять. – marsh

+0

Да, но вопрос в том, почему вызываемый по умолчанию ctor явно вызвал. Это называется неявным образом. – kec

+0

Действительно. Код вопроса содержит избыточные шаги. Я бы посоветовал вам их удалить: это только путаница. Похоже, что некоторые умные alec пытаются сделать код на C++ похожим на Java. – Bathsheba

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