Надеюсь, это простой вопрос.
Могу ли я наследовать абстрактный класс и его реализацию? То есть можно ли заставить работать следующее?
class A {
virtual void func1() = 0;
}
class B {
void func1() { /* implementation here */ }
}
class C : public A, public B {
}
Я пробовал несколько вариантов, и получаю ошибки компиляции с жалобами на нереализованные методы в классе C. Однако я могу сохранить много повторяющегося кода, если смогу выполнить эту работу. Возможно ли это?
Я решил это, создав «составной класс» под названием D, который наследуется от A & B, но содержит код реализации, ранее содержащийся в B. Это делает мою модель наследования менее чистой, но она решает проблему, не требуя дублирования кода. И, как я заметил в комментариях ниже, это делает мои соглашения об именах довольно грубыми.
class A {
virtual void func1() = 0;
}
class B {
// Other stuff
}
class D : public A, public B {
void func1() { /* implementation here */ }
}
class C : public D {
}