Свързани въпроси 'virtual-inheritance'
Виртуално наследяване от базов клас
AFAIK, виртуалното наследяване решава проблема с диаманта, но какво ще стане, ако използвам виртуално просто за наследяване от базов клас? Каква е разликата с използването на virtual тук?
class A
{
/* ... */
};
class B : virtual public A...
184 изгледи
schedule
24.09.2022
Неявно извикване на конструктор на недостъпен виртуален базов клас
Разгледайте кода по-долу. И g++, и clang++ се оплакват (правилно), че конструкторът A(int) е частен в клас D . Имайте предвид, че тъй като A е виртуален базов клас на D , A трябва да се инициализира в mem-initializer на клас D ,...
849 изгледи
schedule
23.09.2022
Виртуално наследство - Проблем с диаманти - Какво наистина се случва
Разбирам и съм чел достатъчно за проблема с диамантите, който се решава чрез виртуално наследяване. Въпросът ми тук е
„Какво всъщност означава поставянето на виртуален до базов клас, от който бихте наследили“
class A { public: void Foo()...
196 изгледи
schedule
23.10.2022
Наследяване на конструктори и виртуални базови класове
На път съм да създам йерархия на клас изключение, която концептуално изглежда донякъде така:
#include <iostream>
#include <stdexcept>
class ExceptionBase : public std::runtime_error {
public:
ExceptionBase( const char * msg ) :...
1323 изгледи
schedule
13.12.2023
Елиминирайте дублиращите се записи от C++11 променливи аргументи на шаблона
Използвам променливи шаблони с множествено виртуално наследяване в C++, за да агрегирам типове в една дефиниция на структура.
Ето примерен набор от структури:
struct meas { int i; };
struct meas2 : public virtual meas { int j; };
struct meas3 :...
2598 изгледи
schedule
04.02.2024
Защо 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
Виртуални таблици и оформление на паметта в множествено виртуално наследяване
Помислете за следната йерархия:
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