In the following code
#include
using namespace std;
class A {
public:
A() {}
virtual ~A() {};
};
class B : public A {
public:
The static type of expression *a
is A
because a
was declared as
A* a = new B;
The compiler resolves the selection of overloaded functions using the static type of the argument.
Even when virtual functions are called the compiler uses the static type of the object to call appropriate function. The difference is only that the compiler uses the table of pointers to virtual functions to indirectly call the required function.