Suppose we have another class that is derived from the Animal class, for instance, Cat. We are going to make a function that will invoke the GetName() and MakeSound() methods for both the Dog and Cat instances. Without creating two separated functions, we can use the template, which is shown as follows:
// Function_Templates.cbp#include <iostream>using namespace std;class Animal{protected: string m_name;public: Animal(string name) : m_name(name) { } // The interface that has to be implemented // in derived class virtual string MakeSound() = 0; string GetName() { return m_name; }};class Dog : public Animal{public: // Forward the constructor arguments Dog(string name) : Animal(name) {} // Copy assignment operator overloading ...