Показать сообщение отдельно
Старый 04.03.2008, 18:34   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Вызов метода базового класса
Привет всем!
Необходимо вызвать 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?