Difficulty: Easy
Correct Answer: Ad-hoc polymorphism
Explanation:
Introduction:
Polymorphism comes in several flavors, and C++ supports more than one. This question asks you to classify function overloading using the conventional terminology from type theory and programming languages.
Given Data / Assumptions:
Concept / Approach:
Function overloading is a form of ad-hoc polymorphism. The compiler chooses among distinct implementations based on the static types of the arguments. This differs from parametric polymorphism (templates/generics) and from subtype (runtime) polymorphism (virtual functions). In C++, overloading and operator overloading are resolved at compile time without a vtable lookup.
Step-by-Step Solution:
1) Present an overload set, e.g., f(int) and f(double).2) Call f with different argument types; the compiler selects the best match.3) Note that each overload is a separate function body (ad-hoc).4) Conclude the classification: ad-hoc polymorphism.
Verification / Alternative check:
Inspect the generated symbols; you will see distinct mangled names for each overload, confirming there are separate implementations.
Why Other Options Are Wrong:
Virtual polymorphism: refers to runtime (subtype) polymorphism via virtual dispatch.Transient / Pseudo polymorphism: non-standard or informal terms not used to classify overloading.
Common Pitfalls:
Confusing templates (parametric) with overloading (ad-hoc). Templates generate implementations from a single pattern; overloading selects among multiple concrete functions.
Final Answer:
Ad-hoc polymorphism
Discussion & Comments