Надеюсь, это простой вопрос.Наследование как абстрактного класса, так и класса в C++
Могу ли я наследовать как абстрактный класс, так и его реализацию? То есть можно ли заставить работать?
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 {
}
Ну, я думаю, мы сузили проблему к нахождению хорошего именования: класса LuaPolygonalGameObject: общественному GameObject, общественному Polygon, общественному LuaItem // Композитного класса Тьфу! Но он скомпилируется! – Watusimoto