04.03.2008, 18:34 | #1 |
MCTS
|
Вызов метода базового класса
Привет всем!
Необходимо вызвать super(), где целевым является метод через класс выше. Допустим, есть такая иерархия: X++: class A { void foo() { //.... } } class B extends A { void foo() { super(); } } class C extends B { void foo() { super(); // вызвать метод foo() у класса A, не вызывая foo() у класса B } } Но тут проблемы начнутся, если кто-то изменит базовый класс, то есть то что подразумевает супер не произойдет, пока мы опять не изменим метод 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(); //... } }; |
|