Virtual
Gets resolved at run-time, leading to a shorter compile-time.
#include <iostream> class Animal { public: virtual void makeSound() = 0; }; class Cow : public Animal { public: void makeSound() { std::cout << "Moo" << std::endl; }; }; int main() { Cow cow; cow.makeSound(); return 0; }
Template
Gets resolved at compile-time, leading to a shorter run-time.
#include <iostream> template <typename T> class Animal { public: void makeSound() { t.makeSound(); }; private: T t; }; class Cow { public: void makeSound() { std::cout << "Moo" << std::endl; }; }; int main() { Animal<Cow> cow; cow.makeSound(); return 0; }