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