Я предполагаю, что вы были дезинформированы о том, как обрабатываются чисто виртуальные функции-члены и для чего они нужны.
Только функции-члены, объявленные как чисто виртуальные , должны быть определены в классах, унаследованных от вашей базы.
Полагаю, вы путаете это с тем фактом, что все Base
станет абстрактным .
Фрагмент ниже в этом посте работает просто отлично, и приводит к поведению, которое вы описали. Несмотря на то, что функция virtual
делает final
своего рода побеждает ее цель.
Я бы порекомендовал вам удалить виртуальный спецификатор .
Это , если ваш Base
не унаследован от базы, где присутствует функция virtual , и вы хотели бы прояснить это для будущих разработчиков, читающих ваш код.
#include <iostream>
C ++ 11
struct Base {
virtual bool operator&& (Base const& rhs) const final {
std::cerr << "Base ::operator&& ()\n";
return this->error () && rhs.error ();
}
virtual bool error () const = 0;
};
struct Child : Base {
virtual bool error () const {
std::cerr << "Child::error ()\n";
return true;
}
};
int
main (int argc, char *argv[])
{
Child ch1, ch2;
; ch1 && ch2;
}
выход
Base ::operator&& ()
Child::error ()
Child::error ()