Примечание: я не спрашиваю, разумно ли это делать или это хороший дизайн. Я просто спрашиваю, является ли это четко определенным поведением и соответствуют ли результаты ожидаемым.
Я столкнулся со следующей иерархией классов:
struct A
{
virtual void foo() = 0;
};
struct B: public A
{
void foo() override
{
std::cout << "B::foo()\n";
}
};
struct C: public B
{
virtual void foo() = 0;
};
struct D: public C
{
void foo() override
{
std::cout << "D::foo()\n";
}
};
int main()
{
A* d = new D;
d->foo(); //outputs "D::foo()"
// A* c = new C; // doesn't compile as expected
}
Этот код хорошо определен? Можно ли переопределить определение с помощью pure-specifier?
C
, если он абстрактный. С другой стороны, я бы сказал, что функция перезаписи и перезаписи не является хорошей практикой, в каком случае вы бы использовали это? - person Ivan   schedule 05.03.2020override
чистых виртуальных функций, как это сделано здесь, вstruct B
, и обнаружил, что это действительно хорошая практика - см. stackoverflow.com/ вопросы/46446652/ - person Odysseus   schedule 05.03.2020