В C++ происходит ли наследование во время выполнения или время компиляции?время наследования или время выполнения?
Примеры?
В C++ происходит ли наследование во время выполнения или время компиляции?время наследования или время выполнения?
Примеры?
Это зависит от того, что вы подразумеваете под «встречей» ... он определяется во время компиляции, но выполняется во время выполнения (vtables и т. Д.).
Фактически, виртуальные таблицы являются механизмом реализации полиморфизма, и вы можете иметь наследование без полиморфизма. – sbi
Ничего не существует во время выполнения, если нет ключевого слова 'virtual' где-то где-то. Ответ неверен и вводит в заблуждение. –
Существуют методы, реализующие наследование как во время компиляции, так и во время выполнения.
Упоминайте, как это сделать? –
@Dead: У этого есть тег C++. – sbi
Проще говоря,
Ключевое слово virtual
определяет, будет ли компилятор или среда должна делать подъем.
В C++ наследования сама по себе (без полиморфизма) является время компиляции функция. В скомпилированный код, будет мало или никакой разницы между
struct foo : bar {};
и
struct foo { bar b; };
для коррекций Кроме доступа к своим членам, не будет никакого «знания» о том, как bar
относится к foo
в скомпилированном двоичном файле.
Это отличается, однако, при добавлении полиморфизм (т.е. virtual
функции, позволяющие dynamic_cast<>()
) к картине. Он разрешает позднее связывание: какая именно функция будет вызываться, определяется во время выполнения. Конечно, для этого требуются структуры данных (обычно используются так называемые виртуальные таблицы ), и эти структуры данных имеют , доступ к которым во время выполнения, чтобы определить, какую функцию вызывать.
Также virtual
базовые классы требуют поддержки времени выполнения для того, чтобы получить доступ к их жгутов производных объектов.
Если вы заинтересованы в затратах времени выполнения определенных функций C++, вы можете захотеть, чтобы попытаться достать копию Inside the C++ Object Model Стенли Липпман. Это старая книга, но если вы хотите знать, как обычно реализуются виртуальные функции-члены и как базовые объекты обычно размещаются в памяти в сценарии с несколькими наследствами и как все это влияет на производительность, вот где вы найдете подробные обсуждения таких тем.
вы можете обосновать свой ответ. – haris
Apt to add Nothing - это время выполнения, если не существует ключевого слова 'virtual', где-то даже в случае наследования. –
@Als: Это кажется слишком широким для меня. Цикл 'for', безусловно, является чистой функцией времени исполнения, несмотря на то, что он не является виртуальным. – sbi
Ваш вопрос не имеет смысла. – SLaks
Меня спрашивали об этом в интервью? – haris
Возможно, вы захотите упомянуть такие вещи, как в следующий раз. Люди, как правило, не ценят это, когда у кажущихся сомнений придумывают не очень умные (некорректно) вопросы без всякой видимой причины.«Меня спросили об этом в одном из интервью, и, к моему удивлению, я не мог понять, что они намеревались», из этого выйдет проблема. –
sehe