여기에서 다중 상속을 사용하고 있습니다.
콘크리트에는 두 가지 계층 구조가 별도로 처리됩니다.
초록 및 구현 자. Abstract는 Implementer와 아무런 관련이 없으므로 (형제 상속의 경우) 가상의 사용은 실패합니다.
파생 클래스에서 가상 함수를 재정의해야합니다. 당신이 시도하는 방식으로 그것을 할 수 없습니다. 이 같은를 다시 작성한다면
구체적으로는 작동합니다 :
class Abstract
{
virtual void AbstractMethod() = 0;
};
class Implementer : private Abstract
{
void AbstractMethod() {};
};
class Concrete : public Implementer
{};
나는이 문제에 영향을주지 않습니다 콘크리트의 공공 또는 민간 상속의 사용을 지적하고 싶습니다. 원래의 예제에서 Implementer를 public으로 변경하면 여전히 구체적인 클래스가되지 않습니다.
유용한 보조 정보 : 가능한 경우 다중 상속을 피하고 상속보다 합성을 선호하며 깊은 상속을 선호합니다. http://en.wikipedia.org/wiki/Composition_over_inheritance
다중 상속 경로를 수행하는 경우 C++에서 기본적으로 사용되는 별도의 상속 계층 구조와 다른 경로를 결합하는 가상 상속이 필요합니다 (가상 메서드는 여전히 상속 클래스를 필요로하며이를 상속하지 않습니다. 형제 교실) : http://en.wikipedia.org/wiki/Multiple_inheritance
왜 당신은 Abstract에서 Implementer를 상속받지 못했습니까? – Cogwheel
@Cogwheel - 내가 사용하려고하는 개념을 더 분명하게 표현한다는 것은 나에게 보인다. –
@Cogwheel oh hai! – M2tM