Re: Polymorphism and inheritance
tony_in_da_uk@yahoo.co.uk wrote:
The point about polymorphism is that the implementation isn't
fixed by the function call itself.
A function pointer allows that, but is in no way polymorphic. It's
the ability to vary the types and get custom behaviour that defines
polymorphism.
How is the following not polymorphic?
struct Base {
void (*foo)(Base*);
};
struct Derived : Base {
};
void impa(Base* b) {
cout << "impa\n";
}
void impb(Base* b) {
cout << "impb\n";
}
void bar(Base* b) {
b->foo(b);
}
int main() {
Base b;
b.foo = &impa;
Derived d;
d.foo = &impb;
bar( &b );
bar( &d );
}
The above could be considered more polymorphic than C++s virtual table
system. After all, I can vary what function is called at runtime on a
per object basis.
To me, polymorphism is simply having the computer take care of your
'if's and 'switch'es implicitly. I can see making the case that taking
care of #if implicitly can be considered (compile time) polymorphism.