2014-10-06 5 views
1

업데이트 : C++에서 다중 상속을 지원한다는 것을 알고 있습니다. 내가 서로 다른 파생 클래스가 동일한 메서드를 공유합니다

내가 방법을 공유하는 여러 파생 클래스에 대한 질문이 있습니다 .. 다중 상속이 문제를 해결하는 가장 좋은 방법이라고 생각 .. 코드는 다음과 같습니다 : 클래스 A와 B, 방법 항목에 대한

class Base{ 
public: 
    virtual double method1(); 
    virtual double method2(); 
} 

class A::public Base{ 
public: 
    virtual double method1(); 
    virtual double method2(); 
} 

class B::public Base{ 
public: 
    virtual double method1(); 
    virtual double method2(); 
} 

class C::public Base{ 
public: 
    virtual double method1(); 
    virtual double method2(); 
} 

class D::public Base{ 
public: 
    virtual double method1(); 
    virtual double method2(); 
} 

() 는 똑같은; C 클래스와 B 클래스의 경우 method1()은 동일합니다. (기본 클래스 멤버를 인수로 사용합니다). (또한

class subBase1::public Base{ 
public: 
    void double method1(); 
} 
class A::public subBase1{} 
class B::public subBase1{} 


class subBase2::public Base{ 
public: 
    void double method1(); 
} 
class A::public subBase2{} 
class B::public subBase2{} 

하지만 지금은 클래스 B와 C, 방법 2()에 대해 동일합니다 : 대신 클래스 A와 클래스 B에 대해 동일한 방법 항목()를 작성

,이에 의해 간단하게 할 수 있다고 생각 인수로 기본 클래스 멤버를 사용합니다. 내가 무엇을 할 수 있을지? 어쨌든 A & B는 한 가지 방법을 공유하고 B & C는 다른 방법을 공유합니까?

감사합니다.

+0

는 또한 ['virtual' 상속]을 확인 (http://stackoverflow.com/questions/21558/in-c-what-is-a-virtual-base-class). –

+0

감사. 방금 C++이 다중 상속을 지원한다는 것을 알아야합니다. 여러 상속이 문제를 해결하는 가장 좋은 방법이라고 생각합니다. – cgao

답변

0

다음 코드는이를 수행합니다.

class Base 
{ 
    public: 
     virtual double method1() { /* code shared by A and B */ } 
     virtual double method2() { /* code shared by B and C */ } 
}; 

class A : public Base 
{ 
    public: 
     virtual double method2() { /* code specific to A */ } 
}; 

class B : public Base 
{ 
}; 

class C : public Base 
{ 
    public: 
     virtual double method1() { /* code specific to C */ } 
}; 

그러나, 이러한 변형이 이루어진 후에는 BBase 동일 주목할 만하다. 다음과 같이 ACB에서 상속할지 여부를 결정하기 위해 상속 계층 구조를 재평가 가치가있을 수 있습니다 :

class B 
{ 
    public: 
     virtual double method1() { /* code shared by A and B */ } 
     virtual double method2() { /* code shared by B and C */ } 
}; 

class A : public B 
{ 
    public: 
     virtual double method2() { /* code specific to A */ } 
}; 

class C : public B 
{ 
    public: 
     virtual double method1() { /* code specific to C */ } 
}; 
+0

고마워요! 클래스 D와 클래스 C가 동일한 method1()을 공유하면 어떻게해야합니까? C와 D를 개별적으로 method1로 지정해야합니까? – cgao

+1

'D'를'C'의 서브 클래스로 만들 수 있습니다. 'C :: method2()'와'D :: method2()'는 모두'B' (또는 첫 번째 예제에서'Base')를 상속받습니다.). 그 복잡성 수준에서 나는 상속 계층 구조를 재평가하기 시작할 것이지만 그것은 주관적인 개인적 선호 사항입니다. 그래도 문제는 상속보다는 구성에 의해 해결 될 수 있습니다. –

관련 문제