The decision to use virtual functions is a simple matter. You just need to know when you'd want to override a base method. Take the following code as an example:
class Animal
{
public:
void MakeSomeNoise()
{
cout << "nothing";
}
};
class Bird : public Animal
{
public:
void MakeSomeNoise()
{
cout << "Tweet";
}
};
In this case, I'd want to override
MakeSomeNoise(). But what if I didn't? This is what would happen:
Animal * pAnimal = new Bird;
pAnimal->MakeSomeNoise();
**Output**
nothing
The screen would say nothing because for all intents and purposes, C++ only sees an animal. However, if you declared it virtual, it knows to search for the lowest method in the class hierachy. Try it again:
class Bird : public Animal
{
public:
virtual void MakeSomeNoise()
{
cout << "Tweet";
}
};
Animal * pAnimal = new Bird;
pAnimal->MakeSomeNoise();
**Output**
Tweet