1

나는 전에 실제로 해본 적이없는 것을하려고합니다. 나는 기본적으로 3 개의 수업을 가지고 있습니다. 클래스 A는 순수 가상 메서드가있는 추상 클래스입니다. 클래스 B는 클래스 A의 가상 메서드와 같은 이름의 메서드가 포함 된 클래스입니다. 클래스 C에서 모든 것을 함께 묶으려고합니다. C에서 클래스 B와 A (다중 상속)를 상속하고 클래스 B의 메소드를 사용하여 클래스 A의 메소드를 구현합니다. 이렇게하면 모듈 방식으로 접근합니다. 아래 예제는 내 코드가 매우 단순화 된 버전입니다. "추상적입니다 : ') INT methodA를 (인해 다음과 같은 멤버로 추상 클래스를 인스턴스화 할 수 없습니다"상속 된 클래스에서 추상 메서드 구현

class A { 
virtual int methodA() = 0; 
virtual int methodB() = 0; 
virtual int methodC() = 0; 
}; 

class B { //B implements A.A() and A.B() 
int methodA() { return 0; }; 
int methodB() { return 0; }; 
}; 

class C : A, B { 
int methodC() { return 0; }; //C implements A.C() 
}; 

I 클래스 C를 컴파일 할 수 있지만 나는 C new C()의 클래스를 구성하려고 할 때 말 컴파일러 메시지가 표시됩니다.

클래스 C에서 다중 상속을 통해 클래스 B를 사용하여 클래스 A를 구현할 수 있습니까?

편집 : 소원은 클래스 B 콘크리트를 유지하는 것입니다.

+0

은'B'가 직접 메소드를 구현? –

+0

@ MarkB 나는 B를 재사용하기를 원합니다. 클래스 A는 클래스 C에서 구현되는 메소드를 포함합니다. –

+0

정말로 이것을하고 싶다면 B에 대한 더미 메소드를 구현할 수 있습니다. "정말로 원한다면"라고하는 유일한 이유는 이것이 아주 좋은 "코드 냄새." 어쩌면 당신이 해결하려고하는 실제 문제에 대해 좀 더 설명 할 수 있습니다. 그리고 여기 누군가가 당신에게 구현을 바꿀 수 있습니다. – DubiousPusher

답변

0

몇 가지 방법에 의한 상용구를 사용하여이를 수행 할 수 있습니다.

class A { 
public: 
virtual int methodA() = 0; 
virtual int methodB() = 0; 
virtual int methodC() = 0; 
}; 

class B { //B implements A.A() and A.B() 
public: 
int methodA() { return 0; }; 
int methodB() { return 0; }; 
}; 

class C : public A, public B { 
public: 
int methodA() { return B::methodA(); } 
int methodB() { return B::methodB(); } 
int methodC() { return 0; }; //C implements A.C() 
}; 

데모 : 필요에 문제가 될 것으로 보인다 무엇 http://ideone.com/XDKDW9

+0

이것은 완전히 작동합니다. 감사! –

+0

'B'는 기본 클래스가 아닙니다 (처음에는 가상 소멸자가 없습니다). – TemplateRex

+1

@TemplateRex'B'에 개인 상속을 사용하여 문제를 해결할 수 있다고 생각합니다. –

관련 문제