Обычно я пытаюсь найти ответы здесь, прежде чем что-либо публиковать, но я даже не уверен, как сформулировать мой вопрос.Наследование как интерфейса, так и реализации C++
Итак, вот что я хочу сделать ... Я хочу определить базовый интерфейс и производный интерфейс. Затем я хочу реализовать базовый интерфейс с дополнительными переменными и методами. Наконец, я хочу реализовать класс Derived из реализованного базового интерфейса, НО ТАКЖЕ, из производного интерфейса. Я не знаю о тебе, но у меня болит голова.
Если я делаю что-то вроде ниже, я получаю Неопределенные определения в коде DerivedFloat, так как этот код «видит» метод GetBaseValue из IBase, унаследованный через IDerivedFloat, а также GetBaseValue, унаследованный от Base.
Несомненно, должен существовать способ получения класса, который использует расширенные функции базовой реализации, а также для того, чтобы убедиться, что он реализует необходимые методы IDerivedFloat.
Теперь ... Это фиктивный пример, чтобы показать, что я концептуально пытаюсь достичь. Это не настоящий пример жизни.
template <typename VALUE_TYPE>
class IBase
{
public:
virtual VALUE_TYPE GetBaseValue() const = 0;
};
class IDerivedFloat : public IBase<FLOAT>
{
public:
virtual void SetBaseValue(const FLOAT & value) = 0;
};
// Implementation of Base
template <typename VALUE_TYPE>
class Base : public IBase<VALUE_TYPE>
{
public:
VALUE_TYPE GetBaseValue() const { return m_BaseValue; }
protected:
VALUE_TYPE m_BaseValue;
}
// Uses expanded Base AND implements IDerivedFloat
class DerivedFloat : public Base<FLOAT>, public IDerivedFloat
{
public:
void SetBaseValue(const FLOAT & value) { m_BaseValue = value };
}
* Обычно я пытаюсь найти ответы здесь, прежде чем я что-нибудь опубликую * - Таким образом, вы не нашли «наследование бриллиантов» или [виртуальное наследование] (http://stackoverflow.com/questions/21558/in-c- what-is-a-virtual-base-class) в любом из ваших поисков? – PaulMcKenzie
Не специалист в C++. Впервые я слышал о сроке наследования бриллиантов. Что касается «виртуального наследования», у меня есть. Но ясно, из вашего комментария, я не знаю, как к этой информации решить мою проблему. – ThermoX
Вы нажали ссылку в своем комментарии? Это в основном дубликат ответа, который вы приняли. – PaulMcKenzie