나는 보통 뭔가를 게시하기 전에 여기에서 답을 찾으려고 노력하지만 내 질문을 공식화하는 방법조차 모르겠습니다.인터페이스와 구현 모두에서 상속 C++
그래서 여기에 내가하고 싶은 것이 있습니다 ... 기본 인터페이스와 파생 인터페이스를 정의하고 싶습니다. 그런 다음, 추가 변수와 메소드를 사용하여 기본 인터페이스를 구현하려고합니다. 마지막으로 구현 된 기본 인터페이스에서 파생 클래스를 구현하고 파생 인터페이스에서 구현하고 싶습니다. 나는 너를 모른다.하지만 머리가 아프다.
아래와 같이 할 경우 DerivedFloat 코드에서 모호한 정의를 얻습니다. 그 이유는 해당 코드가 IBase의 GetBaseValue 메서드와 IDerivedFloat를 통해 상속 된 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