У меня есть три класса: B, D и G. D - это B, а G - D. Оба B и D являются абстрактными. B принадлежит третьей стороне.
B имеет не чистый, виртуальный метод, который G должен реализовать (быть D). Могу ли я и хорошая практика переопределить/переопределить виртуальную функцию как виртуальную?
Пример:
class B // from a third party
{
public:
virtual void foo();
};
class D : public B
{
public:
void foo() override = 0; // allowed by gcc 4.8.2
virtual void bar() = 0;
};
class G : public D
{
public:
// forgot to reimplement foo
void bar() override;
};
int main()
{
G test; // compiler error is desired
}
На вопрос "могу ли я?" gcc позволяет это, но у меня нет термина/словарного запаса, чтобы проверить, что поведение является частью стандарта или undefined и сегодня работает.