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! ]