Вопросы с тегом «virtual-functions»

В объектно-ориентированном программировании виртуальная функция или виртуальный метод - это функция или метод, поведение которых может быть переопределено в наследующем классе функцией с той же сигнатурой. Эта концепция является очень важной частью полиморфизма в объектно-ориентированном программировании (ООП).

1312
Зачем нам нужны виртуальные функции в C ++?

Я изучаю C ++, и я только вхожу в виртуальные функции. Из того, что я прочитал (в книге и онлайн), виртуальные функции - это функции в базовом классе, которые вы можете переопределить в производных классах. Но ранее в книге, изучая базовое наследование, я смог переопределить базовые функции в...

227
Является ли ключевое слово override просто проверкой переопределенного виртуального метода?

Насколько я понимаю, введение overrideключевого слова в C ++ 11 является не чем иным, как проверкой, чтобы убедиться, что реализуемая функция overrideявляется virtualфункцией функции в базовом классе. Это...

221
C ++ «виртуальное» ключевое слово для функций в производных классах. Это необходимо?

С определением структуры, приведенным ниже ... struct A { virtual void hello() = 0; }; Подход № 1: struct B : public A { virtual void hello() { ... } }; Подход № 2: struct B : public A { void hello() { ... } }; Есть ли разница между этими двумя способами переопределения функции...

172
Действительно ли встроенные виртуальные функции не имеют смысла?

Я получил этот вопрос, когда получил комментарий к коду, в котором говорилось, что виртуальные функции не обязательно должны быть встроенными. Я думал, что встроенные виртуальные функции могут пригодиться в тех случаях, когда функции вызываются непосредственно для объектов. Но мне пришёл в голову...

125
Виртуальные функции и производительность - C ++

В своем дизайне классов я широко использую абстрактные классы и виртуальные функции. Было ощущение, что виртуальные функции влияют на производительность. Это правда? Но я думаю, что эта разница в производительности незаметна и, похоже, делаю преждевременную оптимизацию....

110
Как реализованы виртуальные функции и vtable?

Все мы знаем, что такое виртуальные функции в C ++, но как они реализованы на глубоком уровне? Можно ли изменить vtable или даже получить к ней прямой доступ во время выполнения? Существует ли vtable для всех классов или только для тех, у которых есть хотя бы одна виртуальная функция? Имеют ли...

108
Почему методы интерфейса C # не объявлены абстрактными или виртуальными?

Методы C # в интерфейсах объявляются без использования virtualключевого слова и переопределяются в производном классе без использования overrideключевого слова. Для этого есть причина? Я предполагаю, что это всего лишь удобство языка, и, очевидно, CLR знает, как с этим справиться (методы не...

107
Какова стоимость производительности виртуального метода в классе C ++?

Наличие хотя бы одного виртуального метода в классе C ++ (или любом из его родительских классов) означает, что класс будет иметь виртуальную таблицу, и каждый экземпляр будет иметь виртуальный указатель. Так что стоимость памяти вполне понятна. Наиболее важным является стоимость памяти для...

106
Откуда берутся сбои «вызова чисто виртуальной функции»?

Я иногда замечаю программы, которые вылетают на моем компьютере с ошибкой: «вызов чистой виртуальной функции». Как эти программы вообще компилируются, если объект не может быть создан из абстрактного...

105
Почему C # по умолчанию реализует методы как не виртуальные?

В отличие от Java, почему C # по умолчанию рассматривает методы как невиртуальные функции? Это скорее проблема производительности, чем другие возможные результаты? Мне вспоминается абзац Андерса Хейлсберга о некоторых преимуществах, которые дает существующая архитектура. Но как насчет побочных...

100
Безопасное переопределение виртуальных функций C ++

У меня есть базовый класс с виртуальной функцией, и я хочу переопределить эту функцию в производном классе. Есть ли способ заставить компилятор проверить, действительно ли функция, объявленная в производном классе, переопределяет функцию в базовом классе? Я хотел бы добавить какой-нибудь макрос...