У меня есть три класса: 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 и сегодня работает.