PROWAREtech








C++: Polymorphism
A quick example of how polymorphism works.
Polymorphism is a little over hyped. Code execution decisions are made at execution time instead of compilation time.
First an example that does not use polymorphism.
#include <iostream>
using namespace std;
class One
{
public:
void hello() { cout << "hello one" << endl; }
};
class Two : public One
{
public:
void hello() { cout << "hello two" << endl; }
};
int main()
{
One one;
one.hello();
One *pOne = new Two();
pOne->hello(); // executes One::hello(), determined at compile time
Two *pTwo = new Two();
pTwo->hello();
return 0;
}
Now, change the method in the base class to a virtual method and execute the code. This is late-binding/dynamic binding (decided at execution time). The method
hello()
is now polymorphic. This requires dynamic memory (memory not on the stack) using the new
operator. The method Two::hello()
has an "override" of One::hello()
.
#include <iostream>
using namespace std;
class One
{
public:
virtual void hello() { cout << "hello one" << endl; }
};
class Two : public One
{
public:
void hello() { cout << "hello two" << endl; }
};
int main()
{
One one;
one.hello();
One *pOne = new Two();
pOne->hello(); // executes Two::hello(), determined at run time
Two *pTwo = new Two();
pTwo->hello();
return 0;
}
Comment