Вопросы по теме '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 просмотров
schedule
05.05.2024
Виртуальное наследование от базового класса
Насколько я знаю, виртуальное наследование решает проблему алмазов, но что, если я использую виртуальное просто для наследования от базового класса? В чем разница с использованием 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 просмотров
schedule
29.05.2024
Удалите повторяющиеся записи из вариативных аргументов шаблона С++ 11.
Я использую вариативные шаблоны с множественным виртуальным наследованием в C++ для объединения типов в одно определение структуры.
Вот примерный набор структур:
struct meas { int i; };
struct meas2 : public virtual meas { int j; };
struct...
2598 просмотров
schedule
04.02.2024
Наследование конструкторов и виртуальных базовых классов
Я собираюсь создать иерархию классов исключений, которая концептуально выглядит примерно так:
#include <iostream>
#include <stdexcept>
class ExceptionBase : public std::runtime_error {
public:
ExceptionBase( const char * msg ) :...
1323 просмотров
schedule
13.12.2023
Виртуальное наследование - проблема с бриллиантами - что происходит на самом деле
Я понимаю и достаточно прочитал о проблеме с бриллиантами, которая решается виртуальным наследованием. Вот мой вопрос
«Что на самом деле означает размещение виртуального рядом с базовым классом, от которого вы унаследуете?»
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 просмотров
schedule
28.12.2023