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

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


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

7
Могу ли я вызвать виртуальную функцию базового класса, если переопределяю ее?
Скажем, у меня есть классы Fooи Barнастроены так: class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout << y << std::endl; …

13
Может ли шаблон функции члена класса быть виртуальным?
Я слышал, что шаблоны функций-членов класса C ++ не могут быть виртуальными. Это правда? Если они могут быть виртуальными, то каков пример сценария, в котором можно использовать такую ​​функцию?

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

9
C ++ «виртуальное» ключевое слово для функций в производных классах. Это необходимо?
С определением структуры, приведенным ниже ... struct A { virtual void hello() = 0; }; Подход № 1: struct B : public A { virtual void hello() { ... } }; Подход № 2: struct B : public A { void hello() { ... } }; Есть ли разница между …

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


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

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.