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

Почему нельзя использовать static_cast для приведения вниз, когда задействовано виртуальное наследование?
Рассмотрим следующий код: struct Base {}; struct Derived : public virtual Base {}; void f() { Base* b = new Derived; Derived* d = static_cast<Derived*>(b); } Это запрещено стандартом ( [n3290: 5.2.9/2] ), поэтому код не...
18734 просмотров

Виртуальное наследование от базового класса
Насколько я знаю, виртуальное наследование решает проблему алмазов, но что, если я использую виртуальное просто для наследования от базового класса? В чем разница с использованием virtual здесь? class A { /* ... */ }; class B : virtual...
184 просмотров
schedule 24.09.2022

Виртуальные таблицы и макет памяти при множественном виртуальном наследовании
Рассмотрим следующую иерархию: struct A { int a; A() { f(0); } A(int i) { f(i); } virtual void f(int i) { cout << i; } }; struct B1 : virtual A { int b1; B1(int i) : A(i) { f(i); } virtual void f(int i) { cout <<...
7165 просмотров

Удалите повторяющиеся записи из вариативных аргументов шаблона С++ 11.
Я использую вариативные шаблоны с множественным виртуальным наследованием в C++ для объединения типов в одно определение структуры. Вот примерный набор структур: struct meas { int i; }; struct meas2 : public virtual meas { int j; }; struct...
2598 просмотров

Наследование конструкторов и виртуальных базовых классов
Я собираюсь создать иерархию классов исключений, которая концептуально выглядит примерно так: #include <iostream> #include <stdexcept> class ExceptionBase : public std::runtime_error { public: ExceptionBase( const char * msg ) :...
1323 просмотров

Виртуальное наследование - проблема с бриллиантами - что происходит на самом деле
Я понимаю и достаточно прочитал о проблеме с бриллиантами, которая решается виртуальным наследованием. Вот мой вопрос «Что на самом деле означает размещение виртуального рядом с базовым классом, от которого вы унаследуете?» class A {...
196 просмотров
schedule 23.10.2022

Неявный вызов конструктора недоступного виртуального базового класса
Рассмотрим код ниже. И g++, и clang++ жалуются (правильно), что конструктор A(int) является закрытым в классе D . Обратите внимание, что, поскольку A является виртуальным базовым классом D , A должен быть инициализирован в mem-initializer...
849 просмотров
schedule 23.09.2022

Как использовать параметризованный конструктор базового класса после виртуального наследования
У меня есть структура класса, которая выглядит следующим образом: O | A / \ B C \ / D | E И конструкторы работают следующим образом (конкретный код не включен для краткости, но я могу конкретизировать его, если это...
442 просмотров