C++ Polymorphism

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 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;
}