C++ производный класс от двух одинаковых базовых классов
Вот мои занятия:
class Base1
{
public:
Base1();
~Base1();
virtual void main_func()=0;
}
class D1 : public Base1
{
public:
D1();
~D1();
virtual void main_func(do_d1_main(););
}
class D2 : public Base1
{
public:
D2();
~D2();
virtual void main_func(){do_d2_main();};
}
class Base2
{
public:
Base2();
~Base2();
int m_needed_by_b1;
}
class D12B2: public Base2, public D1, public D2
{
public:
D12B2();
~D12B2();
}
Вот проблема:
И то и другое do_main_func1()
а также do_main_func2()
нужен доступ к члену m_needed_by_b1
в Base2
, Как?
Могу ли я определить виртуальную функцию main_func
для каждого в пределах class D12B2
? Это дало бы им доступ ко всем D12B2
, в том числе Base2
, Как бы я указал каждый отдельно?
Я думал о добавлении (защищенного) члена в Base1
это указатель на Base2
объект. Это должно быть установлено D12B2
, Кажется, что может быть более элегантный способ сделать это.
ТИА
кругозор
1 ответ
Кажется, что может быть более элегантный способ сделать это.
Скорее всего, есть - не используйте множественное наследование.
Однако, если вы собираетесь настаивать на использовании множественного наследования, есть некоторые вещи, на которые вы должны обратить внимание: D1
а также D2
должны наследоваться практически в D12B2
чтобы избежать проблемы с алмазами. Если предположить, do_d1_main
а также do_d2_main
на самом деле означает main_func
, то вы можете реализовать D12B2::main_func
который сможет получить доступ m_needed_by_b1
,
Но вернемся к оригинальной заметке:
Это звучит как Base1
а также Base2
не должно существовать, и D1
а также D2
должны быть чисто абстрактные классы. Который оставил бы вас с
class D1
{
public:
virtual void d1_func() = 0;
};
class D2
{
public:
virtual void d2_func() = 0;
};
class D12B2 : public virtual D1, public virtual D2
{
public:
D12B2();
~D12B2();
virtual void d1_func()
{
// do something
}
virtual void d2_func()
{
// do something else
}
private:
int m_myData;
};