calling virtual function from within another virtual function
 
Hi Guys,
 Is Ok to invoke a virutal function from within virtual function.
Specifically here is the example I tried and it seems to have worked:
(what I am doing is derived class::foo() (foo is virtual)invokes  base
case implementation of  foo(), which in turn calls bar() thats virutal
too . So I am reusing some part of logic which is common to both base
and derived and overriding other part which is different by using 2
virtual functions like this)
#include <iostream.h>
using namespace std;
class C {
public:
  virtual void foo(int foo) {
    cout << "in C::foo() foo=" << foo << endl;
    bar(foo);
  }
  virtual void bar(int bar) {
    cout << "in C::bar() bar=" << bar << endl;
  }
private:
  int i;
};
class A : public C {
public:
  virtual void foo(int foo) {
    cout << "in A::foo() foo=" << foo << endl;
    if(foo > 0)
      C::foo(foo);
  }
  virtual void bar(int bar) {
    cout << "in A::bar() bar=" << bar << endl;
  }
};
int main()
{
  C c;
  A a;
  c.foo(10);
  a.foo(20);
  C* tmp;
  tmp = &c;
  tmp->foo(30);
  tmp = &a;
  tmp->foo(40);
}
output:
in C::foo() foo=10
in C::bar() bar=10
in A::foo() foo
in C::foo() foo
in A::bar() bar
in C::foo() foo=30
in C::bar() bar=30
in A::foo() foo=40
in C::foo() foo=40
in A::bar() bar=40
so is it OK to use polymorphism like this from point of view of C++
standard? I tried this with SUN CC compiler on a solaris box. Are
there any potential downsides to following this paradigm, if so what
would be better way of doing this?
Thanks,
Sunil
-- 
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]