Related articles |
---|
Polymorphism vs. Overloading gdevivo@conicit.ve (1994-10-22) |
RE: Polymorphism vs. Overloading visualw@cnj.digex.net (John. M. Miano) (1994-10-31) |
Newsgroups: | comp.compilers |
From: | "John. M. Miano" <visualw@cnj.digex.net> |
Keywords: | polymorphism |
Organization: | Compilers Central |
References: | 94-10-144 |
Date: | Mon, 31 Oct 1994 22:44:48 GMT |
gdevivo@conicit.ve (Gabriela O. de Vivo) writes:
>Now, I wonder if some of you could help me by stating more precisely (and
>rigourosly) the exact nature of the difference.
I think the best way to explain the difference is that in overloading a
function is bound to a class/structure.
With polymorphism a function is bound to an object (An object being a
the manifestation of some class/structure).
Since polymorphism means bound to an object it is restricted to member
functions/methods. In Ada/C++ you can create overloaded functions but
polymorphism is not applicable to these.
Overloading is generally resolved at compile-time while polymorphism must be
resolved at run time.
Example Polymorphism vs. Overloading
class X
{
public:
virtual void func (int x) {
cout << "I'm int in X " << x << endl << flush ; }
virtual void func (char *x} {
cout << "I'm char in X" << x << endl << flush ; }
} ;
class Y : public X
{
public:
virtual void func (int x) {
cout << "I'm int in Y " << x << endl << flush ; }
virtual void func (char *x) {
cout << "I'm char in Y " << x << endl << flush ; }
} ;
main ()
{
X xo, *xp1, *xp2 ;
Y yo ;
xp1 = &xo ;
xp2 = &yo ;
// Overloading relates to whether func (char *) or func (int) is
// called. Polymorphism relates to whether X::func or Y::func is
// called (or a better way to say this is whether xo's func is
// called or yo's func is called).
xp1->func (1) ; // calls X::func (int)
xp1->func ("some text") ; // calls X::func (char *)
xp2->func (1) ; // calls Y::func (int) ;
xp2->func ("some text") // calls Y:: func (char) ;
return 0 ;
}
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.