В C ++ наследование само по себе ( без полиморфизма ) является функцией времени компиляции . В скомпилированном коде будет мало или нет различий между
struct foo : bar {};
и
struct foo { bar b; };
За исключением смещений для доступа к своим членам, не будет никаких "знаний" о том, как bar
относится к foo
в скомпилированном двоичном файле.
Это отличается, однако, при добавлении полиморфизма (т. Е. virtual
функций, позволяющих dynamic_cast<>()
) к изображению. Это позволяет позднее связывание : какая именно функция будет вызвана, определяется во время выполнения. Конечно, для этого требуются структуры данных (обычно с использованием так называемых виртуальных таблиц ), и эти структуры данных доступны во время выполнения , чтобы определить какую функцию вызывать.
Кроме того, virtual
базовые классы требуют поддержки во время выполнения для доступа к ним в рамках производных объектов.
Если вас интересуют затраты времени выполнения некоторых функций C ++, вы можете попытаться получить копию Внутри объектной модели C ++ Стэнли Липпман. Это старая книга, но если вы хотите узнать, как обычно реализуются виртуальные функции-члены и как базовые объекты обычно размещаются в памяти в сценарии с множественным наследованием, и как все это влияет на производительность, то здесь вы найдете подробные обсуждения из таких тем.