Описание тега virtual-functions

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

Мне нужна помощь по этому ключевому слову и наследованию

abstract class BaseClass { public virtual void Accept(IVisitor visitor) { visitor.Visit(this); } } class DerivedClass: BaseClass { } interface IVisitor { void Visit(BaseClass baseEntity); void Visit(DerivedClass derivedEntity); } class Visitor : IVi…
4 ответа

Заставить производный класс переопределить хотя бы одну виртуальную функцию

Представьте себе этот простой базовый класс: struct simple_http_service { virtual reply http_get(…); virtual reply http_post(…); virtual reply http_delete(…); // etc. }; Я хотел бы запретить пользователю выходить из этого класса, не переопределяя хо…
04 июн '11 в 09:30
1 ответ

Проблемы с реализацией виртуальной функции

У меня есть некоторые проблемы с реализацией виртуальной функции родительского класса: поэтому мой код: class Shape { public: virtual ~Shape(); virtual bool Intersect (const Ray& ray, double& t) const =0;// to premit abstraktion (definition …
19 дек '13 в 16:05
3 ответа

Производительность Expression.Compile против Lambda, прямые против виртуальных вызовов

Мне интересно, насколько быстродействующим является Expression.Compile по сравнению с лямбда-выражением в коде и по сравнению с прямым использованием методов, а также с прямыми вызовами методов по сравнению с вызовами виртуальных методов (псевдокод)…
3 ответа

Виртуальная функция

У меня есть вопрос относительно виртуальной функции C++. Производный класс (DerivedAlgo) реализует виртуальную функцию (BaseAlgo::process), но немного меняется в сигнатуре функции, используя DerivedData введите в качестве входного параметра вместо B…
18 апр '11 в 18:06
10 ответов

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

У меня есть базовый класс с виртуальной функцией, и я хочу переопределить эту функцию в производном классе. Есть ли способ заставить компилятор проверить, переписывает ли функция, которую я объявил в производном классе, функцию в базовом классе? Я х…
30 янв '09 в 23:08
3 ответа

Виртуальная функция, вызывающая ошибку сегментации

Я получаю ошибку сегментации, когда пытаюсь получить доступ к виртуальной функции. Код в основном так: class Super { public: Super() { cout << "Ctor Super" << endl; } virtual void test() = 0; }; class Sub : public Super { public: Sub() {…
2 ответа

Чисто виртуальный метод, называемый ошибкой

У меня есть следующие определения: class PartitioningMethod { public: virtual void addConstraints(ConstraintManager& cm) = 0; virtual bool hasMoreConstraints() = 0; virtual void setQuery(const Query& q) = 0; virtual ~PartitioningMethod(){ } …
20 авг '12 в 20:42
1 ответ

Чистая реализация виртуальной функции

Я читаю " Эффективный C++" Скотта Мейерса, и я нахожусь в разделе о наследовании. Он сказал, что Чистые виртуальные функции определяют только наследование интерфейса. Простые (нечистые) виртуальные функции определяют наследование интерфейса плюс нас…
1 ответ

Виртуальные функции "Форма" Назначение

Я не могу заставить свой класс цилиндров правильно выполнять функции печати и объема. Вот инструкции для назначения: Разработайте класс с именем Shape, который является абстрактным базовым классом. Shape имеет две чисто виртуальные функции, printSha…
2 ответа

Таблица виртуальных функций множественного наследования

Пример кода следующий: class A { public: int k; virtual int f(); }; class B:public virtual A { public: virtual int a(); }; int main() { cout<<sizeof(A)<<sizeof(B); } Это печатает 8 12 Похоже на то class B имеет собственную новую таблицу …
27 авг '14 в 08:59
1 ответ

Можно ли использовать множественное наследование, если один родительский класс является интерфейсом?

Можно ли использовать множественное наследование, если один родительский класс является интерфейсом (содержит только чисто виртуальные функции с виртуальным деструктором)? Я хочу выставить только интерфейсную часть (желтый класс на рисунке) для уве…
2 ответа

Как избежать виртуальных функций в этом случае?

У меня есть ситуация, когда у меня есть класс на микроконтроллере, который имеет дело с широтно-импульсной модуляцией. Чрезвычайно упрощенный пример: class MotorDriver { int pin_; public: MotorDriver(int pin); void init(); void start(); void stop();…
05 янв '17 в 02:08
1 ответ

Метод переопределения, который возвращает разыменование к этому

У меня есть метод в Base класс, который возвращает разыменование this, Я хотел бы использовать этот метод в Derived класс, но и немного расширить его. Пример будет говорить сам за себя: #include <iostream> class Base { private: int value = 0; …
20 янв '16 в 08:51
2 ответа

Виртуальная функция в иерархии наследования

Когда у меня что-то подобное, и когда у меня есть a* mya=new c(); и я звоню a->displayStuff это вызывает Class a метод и когда virtual в Class a вместо Class bэто вызывает Class b метод. поскольку Class c не имеет реализации этого метода, какое п…
06 янв '14 в 16:57
4 ответа

Как сделать абстракцию для базового класса с помощью виртуальных функций?

У меня следующая структура class Base { public: Base(Type); virtual render } class A { public: Base(Type == A); void render() } class B { public: Base(Type == B); void render() } void client_function() { Base baseObject(A); //Base is an instance of …
08 сен '11 в 08:37
2 ответа

Определение функции члена при построении объекта

У меня есть класс, в котором мне нужна функция, которую я могу определить для каждого объекта. Я хотел бы иметь возможность определять конкретные функции каждого объекта при определении вектора указанных объектов. Эти векторы моего объекта составят …
2 ответа

Хитрый полиморфизм и виртуальные функции

У меня есть следующий код. #include <iostream> using namespace std; class K { public: virtual void add_st(K* n) { cout << "add_st (K*) from K\n"; } }; class L: public K { public: virtual void add_st(L* a) { cout << "add_st (L*) fro…
26 июн '14 в 19:20
2 ответа

Почему использование не может быть использовано для определения виртуальной функции?

Я недавно обнаружил использование using импортировать функцию базового класса в пространство имен производного класса (когда он скрыт). Я пытался использовать его для импорта функции из базового класса в качестве реализации функции в производном кла…
1 ответ

Какую информацию хранит RTTI для полиморфного объекта?

Прежде чем я начну - я знаю, что полиморфный объект имеет vtable для выбора правильного метода во время выполнения. Однако есть ли дополнительная информация, которую содержит каждый полиморфный объект (исключая vtable)? Я пытаюсь измерить размер / с…