Функция переопределения C++ с аргументом внутреннего класса
У меня есть абстрактный график (
A
в примере). И у него есть внутренний класс, который используется для одной из функций. Я хочу получить новый класс (например) из этого класса и сделать оболочку вокруг
InnerA
чтобы добавить новое поле, которое следует использовать.
class A {
public:
class InnerA {};
virtual void function(InnerA) = 0;
};
class B : public A {
public:
class InnerB : InnerA {
public:
int new_field = 0;
};
void function(InnerB b) override {
b.new_field = 1;
}
};
Но я получаю сообщение об ошибке
function
в
B
не может переопределить базовую функцию. Как правильно это реализовать?
error: 'void B::function(B::InnerB)' marked 'override', but does not override
void function(InnerB b) override {
^~~~~~~~
1 ответ
Тип аргумента отличается, поэтому это недопустимое переопределение.
Рассмотрим эту функцию:
void func(A* a) {
A::InnerA innerA;
a->function(innerA);
}
Для действительного переопределения это должен быть действительный вызов функции производного класса, а это не так. Функция производного класса должна иметь возможность обрабатывать все вызовы функции базового класса, имея те же аргументы и тип возвращаемого значения.