Есть ли способ под C++ иметь наследование объектов наследования, действующее как наследование конструкторов? Давайте следующее:Наследование наследования конструкторов против наследования методов в объектах C++
(myclass.h)
class B{
public:
B();
void doSomething();
};
class A : public B{
public:
A();
void doSomething();
}
(myclass.cpp)
B::B()
{
executeBCode();
}
void B::doSomething()
{
executeBCode();
}
A::A : B()
{
executeACode();
}
void A::doSomething()
{
executeACode();
}
Что происходит, что вызов конструктора, я исполню executeBCode()
и затем executeACode()
. С вызовом метода doSomething()
на объекте я выполняю только executeACode()
, потому что он переопределен. Есть ли способ наследования методов, которые ведут себя как наследование на конструкторах, поэтому выполняют как производный, так и базовый код? Я пришел к этому вопросу, потому что мне нужно, чтобы базовый класс в моем коде делал что-то для его производного класса, и, кроме того, производный должен выполнять свои собственные инструкции: это просто вызывает функцию doSomething()
на производном. Это может быть случай метода closeAll()
, называемого A, например, где базовый класс закрывает свои собственные базовые объекты и выводит их конкретные вещи.
Вы можете просто добавить вызов 'B :: doSomething();' в функцию 'void A :: doSomething()'. Еще раз исследуем шаблон шаблона шаблона (http://en.wikipedia.org/wiki/Template_method_pattern). – Niall
Вызов 'B :: doSomething();' on A означает, что наследование бесполезно. Я не могу игнорировать, почему он не был реализован на языке C++ с ключевым словом в базовом методе. И, возможно, на других языках программирования тоже ... – ABCplus
'doSomething' не переопределяется, он просто скрыт другой функцией с тем же именем. Переопределение означает замену виртуальной функции, и у вас нет виртуальных функций. –