Наследование C++: вызов конструктора базового класса в заголовке

Предположим, что класс Child является производным от класса Parent. Как в пятифайловой программе указать в Child.h, что я хочу вызвать конструктор Parent? Я не думаю, что что-то вроде следующего является законным внутри заголовка:

Child(int Param, int ParamTwo) : Parent(Param);

Как в этой ситуации должен выглядеть синтаксис конструктора Child.cpp?


person user3658679    schedule 04.06.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions/120876/ ?   -  person quantdev    schedule 05.06.2014


Ответы (2)


В Child.h вы просто объявите:

Child(int Param, int ParamTwo);

В Child.cpp у вас будет:

Child::Child(int Param, int ParamTwo) : Parent(Param) {
    //rest of constructor here
}
person wolfPack88    schedule 04.06.2014
comment
Что делать, если у меня нет файла .cpp, а это что-то вроде интерфейса? - person Vinz; 31.01.2016

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

class Child : public Parent {
    // ...
    Child(int Param, int ParamTwo) : Parent(Param)
    { /* Note the body */ }
};

или просто заявить об этом

class Child : public Parent {
    // ...
    Child(int Param, int ParamTwo);
};

и определите в блоке компиляции (Child.cpp)

Child::Child(int Param, int ParamTwo) : Parent(Param) {
}
person πάντα ῥεῖ    schedule 04.06.2014
comment
+1 Кстати: использование implementation вместо definition может вводить в заблуждение. - person Wolf; 05.06.2014