私は何かを投稿する前に通常ここで答えを見つけようとしますが、私の質問をどのように公式化するかはわかりません。インターフェイスと実装の両方から継承するC++
ここで私がやりたいことは...ベースインターフェイスと派生インターフェイスを定義したいと思います。次に、追加の変数とメソッドを使用して、基本インターフェースを実装したいと考えています。最後に、実装された基本インターフェイスから、派生インターフェイスからの派生クラスを実装したいと思います。私はあなたについて知りませんが、頭が痛いです。
私が以下のようにすると、DerivedFloatコードの下であいまいな定義が得られます。なぜなら、そのコードはIDerivedFloatで継承されたIBaseのGetBaseValueメソッドとBaseから継承されたGetBaseValueの両方を参照できるからです。
確かに、基本実装の拡張機能を使用するクラスを導出する方法と、必要なIDerivedFloatメソッドを実装することを確認する方法が必要です。
Now ...これは、概念的に達成しようとしていることを示すためのダミーの例です。それは実際の人生の例ではありません。
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-あなたの検索結果の中で何が仮想ベースクラスですか? – PaulMcKenzie
C++の専門家ではありません。私は初めてダイヤモンドの継承という言葉を聞いたことがあります。 「仮想継承」に関する限り、私は持っています。しかし、明らかに、あなたのコメントから、私は自分の問題を解決するためにその情報をどのように知っていません。 – ThermoX
コメントのリンクをクリックしましたか?それは基本的にあなたが受け入れた答えの複製です。 – PaulMcKenzie