Как известно, наследование и полиморфизм лежат в основе объектно-ориентированного программирования. С помощью наследования можно создать общий класс, определяющий общие черты совокупности объектов. Этот класс может наследоваться другими более специфическими классами, каждый из которых добавляет что-нибудь свое.
Есть еще одна причина, по которой наследованию придается такая важность: с его помощью поддерживается полиморфизм во время выполнения программы. С помощью полиморфизма реализуется принцип «один интерфейс — множество методов».
В С++ полиморфизм поддерживается как на этапе исполнения программы, так и на этапе компиляции. В качестве примера полиморфизма на этапе компиляции можно указать перегрузку операторов и функций. Но как бы ни была полезна перегрузка операторов и функций, с их помощью нельзя решить все задачи, возникающие в объектно-ориентированном программировании. Поэтому в С++ также используют полиморфизм времени исполнения программы, для чего используются производные классы и виртуальные функции.