Re: "Polymorphism and Overloading in C++"
Christopher Pisz <nospam@notanaddress.com> writes:
The way I see it, overloading is one facet of polymorphism, while
inheritance is the other. Depends which interviewer you talk to, some
have one in mind or the other or both. Best to go into both usually.
The term ?polymorphism? was coined by Strachey in 1967. At
least this is the common wisdom, even though, AFAIK, Strachey
did not give proper definition at all, but just talked about
polymorphism. But maybe I just have not found his definition yet.
As far as I have access to Strachey's words, I cannot see
any reason why overloaded operators should not be called
?polymorphic?. On the opposite, Strachey said:
?In ad hoc polymorphism there is? ... ?All the ordinary
arithmetic operations and functions come into this category.?!
Of course, he did not refer to C++ (in 1967), but possibly
to some programming language.
My personal definition of polymorphism is: I call a
function symbol ?f? polymorphic, when the meaning of
?f(x)? is mapped to one of ?f1(x)?, ?f2(x)?, ... by
the type of x. This definition encompasses operator
overloading. In C++, operator overloading is compile-
time polymorphism, not run-time polymorphism, though.
(By my definition ?polymorphism? is an implementation
detail. Therefore, it is possible that, sometimes, one does
not know whether a function symbols is polymorphic. For
example, I might know that ?-? can be applied to both int
and double. When the processor used has a single CHS opcode
for both int and double values, there is only one
implementation, so it is not polymorphic. ?-? always means
?CHS?. Another processor used might have a ?CHSI? for int
and a ?CHSD? for double, and C++ maps ?-? to ?CHSI? or
?CHSD? depending of the type of the operand for this other
processor, so in this case ?-? is polymorphic. But for the
C++ programmer it suffices to know that he can apply it to
both int and double with the intended semantics.)