Привет всем!
Необходимо вызвать super(), где целевым является метод через класс выше.
Допустим, есть такая иерархия:
X++:
class A
{
void foo()
{
//....
}
}
class B extends A
{
void foo()
{
super();
}
}
class C extends B
{
void foo()
{
super(); // вызвать метод foo() у класса A, не вызывая foo() у класса B
}
}
Самое простое решение это вместо super() написать, то что лежит в методе A (//...)
Но тут проблемы начнутся, если кто-то изменит базовый класс, то есть то что подразумевает супер не произойдет, пока мы опять не изменим метод foo() класса C
Другой вариант:
X++:
class C extends B
{
void foo()
{
A a;
;
a = this;
a.foo();
}
}
А здесь получается, вместо описания - использование... То есть по сути операции
X++:
A a;
;
a = this;
a.foo();
должна использоваться вне класса.
И к тому же, вполне вероятно, что это не сработает. Если считать foo виртуальной функцией, то получаем - вызов a.foo() вызовет C::foo() и как результат - бесконечная рекурсия с переполнением стека.
То есть требуется, что то вроде:
X++:
class C : public B
{
public:
virtual void foo()
{
A::foo();
//...
}
};
Может быть есть какие-нибудь способы обойти класс B?