Изменение сигнатуры виртуальной функции
От: Muxa  
Дата: 18.04.23 14:13
Оценка:
Есть два класса — первый определяет интерфейс, второй его реализует:
class I
{
    virtual I* F0() = 0;
    virtual I& F1() = 0;
    virtual void F2(I*) = 0;
    virtual void F3(I&) = 0;
};

class C : public I
{
    C* F0() override { return this; }
    C& F1() override { return *this; }
    void F2(C*) override {}
    void F3(C&) override {}
};
https://godbolt.org/z/qd4so7TW3

В сигнатурах функций-реализаций я заменил тип I на C.

Первые две функции компилятор (gcc/clang) прожевывает без проблем, а на вторые две выдает ошибку
'void C::F2(C*)' marked 'override', but does not override


Почему компилятор такое позволяет для F0 и F1, но не позволяет для F2 и F3?
Отредактировано 18.04.2023 14:15 Muxa . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.