Вопросы по теме 'virtual-inheritance'

Как виртуальное наследование решает алмазную (множественное наследование) неоднозначность?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C {...
84651 просмотров

Размер класса с виртуальным базовым классом
Возможный дубликат: размер объекта с виртуальным class X {}; class Y : public virtual X {}; class Z : public virtual X {}; class Class : public Y, public Z {}; Почему sizeof (Class) выводит 12 на моем компиляторе gcc?...
172 просмотров

Как работает таблица виртуального наследования в g++?
Я пытаюсь лучше понять, как виртуальное наследование работает на практике (то есть не в соответствии со стандартом, а в реальной реализации, такой как g++ ). Собственно вопрос выделен внизу жирным шрифтом. Итак, я построил себе граф наследования,...
583 просмотров

Неоднозначность множественного наследования интерфейсов в C++
Я сделал тестовый код следующим образом: #include <iostream> using namespace std; #ifndef interface #define interface struct #endif interface Base { virtual void funcBase() = 0; }; interface Derived1 : public Base { virtual void...
7162 просмотров

Виртуальное наследование и интерфейсы
class IA { public: virtual void a() = 0; }; class A: virtual public IA { public: virtual void a() { } }; class IB: virtual public IA { public: virtual void b() = 0; }; class B: virtual public IB, public A { public: virtual...
2612 просмотров
schedule 15.10.2023

При использовании виртуального базового класса в сценарии множественного наследования необходимо ли, чтобы все производные классы ссылались на виртуальную базу?
Стандарт кодирования JSF C++ ВВС США требует, чтобы виртуальный базовый класс был объявлен для каждого производного класса, который обращается к виртуальной базе. Например, в следующей иерархии: A / \ B1 B2 C1 C2 \ / D ... правило,...
669 просмотров
schedule 05.06.2023

Ошибка MinGW 4.7.0–4.7.2: недействительный этот указатель в функциях-членах при использовании смешанного виртуального и невиртуального множественного наследования
У меня есть код с наследованием, который выглядит так: B / \ / \ / \ BI D (template) / \ / \ / DI (template) [B]ase и [D]erived — это интерфейсы, содержащие static...
294 просмотров

Виртуальное наследование C++ и повышение Python
В игре, над которой я работаю, у меня есть два класса C++ (ICollidable и Sprite), которые фактически наследуют другой класс C++, называемый Object, для его свойств Position и Size. У меня есть эти три класса, открытые для python с помощью boost...
1235 просмотров

Использование CRTP с виртуальным наследованием
У меня есть иерархия узлов, где может возникнуть «алмаз». Каждый узел должен быть клонируемым, но я не хочу писать метод клонирования для каждого узла. Поэтому я использую CRTP. class Node { public: Node(){} Node(Fill*) { }...
1481 просмотров
schedule 03.06.2023

Как отказаться от неполиморфного виртуального базового класса?
Есть ли способ перейти от виртуального базового класса к производному классу, когда виртуальные функции не задействованы? Вот некоторый код, чтобы продемонстрировать, о чем я говорю: struct Base1 { int data; }; struct Base2 { char...
935 просмотров
schedule 28.11.2022

Виртуальное наследование с наследованием конструктора
У меня есть иерархия классов, которая сводится к class Module { }; struct Port { Module& owner; Port(Module& owner) : owner(owner) {} }; struct InPort : virtual Port { using Port::Port; }; struct OutPort : virtual Port...
423 просмотров

C++ Static_cast по указателю на виртуальный базовый класс
Примерно через 6 или 7 лет программирования почти исключительно на C++ я обнаружил, что: struct A { virtual ~A() = 0; // Abstract class }; A::~A() {} struct B : virtual A {}; int main() { A* a = new B;...
609 просмотров

Получение класса из виртуальной базы без конструктора по умолчанию
Я пишу небольшую иерархию классов исключений для приложения C++, которое я разрабатываю, и у меня возникают проблемы с косвенным выводом из std::runtime_error . Вот код, аналогичный тому, что я написал до сих пор: class RuntimeException : public...
423 просмотров

Как вызвать конструктор копирования всех базовых классов для копирования объекта большинства производных классов при наследовании бриллиантов в С++?
Рассмотрим приведенный ниже код: #include<iostream> using namespace std; class A { public: A() {cout << "1";} A(const A &obj) {cout << "2";} }; class B: virtual A { public: B() {cout << "3";} B(const...
2013 просмотров

Стоимость виртуального наследования от интерфейса
Это попытка понять влияние использования наследования виртуального базового класса, особенно в отношении стоимости времени выполнения. Ситуация, которую я имею в виду, также включает в себя Интерфейсы (или ABC для этого). I---------- / |...
282 просмотров

Выбор конструктора виртуального наследования
Почему это печатает 20000? Код явно вызывает определенные базовые конструкторы на всем пути наследования, но игнорирует указанный конструктор и вместо этого использует конструктор по умолчанию. #include <iostream> struct Car { Car() :...
170 просмотров

Класс, использующий виртуальное наследование, позволяет конструктору базового класса перезаписывать члены другого базового класса.
Я недостаточно хорошо знаком с расположением памяти объектов, содержащих виртуальные базы, чтобы понять, почему следующее выглядит некорректно скомпилированным как clang, так и gcc. Это академическое упражнение, поэтому извините за легкомыслие...
99 просмотров

Почему назначение копирования заставляет GCC выдавать предупреждение -Wvirtual-move-assign?
Следующая иерархия классов вызовет предупреждение [-Wvirtual-move-assign] в GCC, если назначение перемещения вызывается для экземпляра B. struct A { std::vector<int> v; }; struct B : public virtual A {}; Следующие сценарии...
50 просмотров
schedule 05.04.2023

последовательность конструктора двух родительских классов
У меня есть один вопрос по двум версиям кода. Единственное отличие состоит в том, чтобы переключить виртуальное ключевое слово между родительским классом. Есть ли причина, по которой это произошло? Версия первая: #include<iostream> using...
64 просмотров

неправильный конструктор вызвал виртуальный базовый класс виртуального базового класса
У меня проблема с конструкторами очень сложной структуры классов, разбросанных по нескольким файлам. Каждый класс имеет общедоступный конструктор по умолчанию без аргументов и защищенный конструктор с аргументами. Каждый конструктор любого...
67 просмотров