2013-11-25 5 views
0

프로젝트에서 다음과 비슷한 구조가 있습니다. 다음과 같이인터페이스 용 일반 함수 구현

class ProgrammersCacluator { 
    public: 
    virtual int add(int a, int b); 
    virtual int rshift(int a, int b); 
} 

class MathematiciansCalculator { 
    public: 
    virtual int add(int a, int b); 
    virtual int multiply(int a, int b); 
} 

나는이 구현 오전 :

class ProgrammersCalculatorI : public virtual ProgrammersCalculator { 
    public: 
    int add(int a, int b); 
    int rshift(int a, int b); 
} 

int ProgrammersCalculatorI::add(int a, int b) { 
    return(a + b); 
} 

int ProgrammersCalculatorI::rshift(int a, int b) { 
    return(a >> b); 
} 

class MathematiciansCalculatorI : public virtual MathematiciansCalculator { 
    public: 
    int add(int a, int b); 
    int multiply(int a, int b); 
} 

int MathematiciansCalculatorI::add(int a, int b) { 
    return(a + b); 
} 

int MathematiciansCalculatorI::multiply(int a, int b) { 
    return(a * b); 
} 

지금 나는이 추가 구문을 많이하지만, 그 대부분은 ICE (인터넷 커뮤니케이션 엔진)에 의해 적용됩니다 실현, 어떤이다 우리가 프로젝트의 섹션들 사이에서 통신하기 위해 사용하는 프레임 워크.

내가 특히 염려하는 것은 add 기능의 복제입니다. 나는 다중 상속을 시도했지만, (분명히) 작동하지 않았다.

ProgrammersCalculatorIMathematiciansCalculatorI의 구조를 조정하여 add 메서드를 한 번만 구현하면 되나요?

실제 프로젝트에서는 add 길이가 수백 줄이고 그와 같은 몇 가지 방법이 있습니다.

+0

수학자와 프로그래머간에 공통적 인 모든 작업에 가상 함수를 제공하는 "HumansCalculator"인터페이스가 있습니까? – Chad

답변

1

당신은 ProgrammersCacluator을해야하고 MathematiciansCalculatorslice에 동일한 기본에서이 같은 상속 :

:

interface BaseCacluator { 
    idempotent int add(int a, int b); 
}; 

interface ProgrammersCacluator extends BaseCalculator { 
    idempotent int rshift(int a, int b); 
}; 

interface MathematiciansCalculator extends BaseCalculator { 
    idempotent int multiply(int a, int b); 
}; 

그런 다음 해당 구현을 한 번만 add()를 구현하고 상속 다중 상속을 사용할 수 있습니다

class BaseCalculatorI : virtual public BaseCalculator { 
public: 
    virtual int add(int a, int b, const Ice::Current &); 
}; 

class ProgrammersCalculatorI : public BaseCalculatorI, virtual public ProgrammersCalculator { 
public: 
    virtual int rshift(int a, int b, const Ice::Current &); 
}; 
+0

어떻게 그 조각에서 볼까요? 상속에 관한 문서를 찾을 수 없습니다. 나는 그것이지지되지 않았다는 인상하에 있었다. – screenmutt

+0

@screenmutt 슬라이스에 예제를 추가했지만 물론 상속을 지원합니다. http://doc.zeroc.com/display/Ice/Interface+Inheritance – Slava

+0

불행하게도 이것은 인터페이스의 상속을 구현 한 것입니다. 이것은 구현에는 적용되지 않습니다. – screenmutt

관련 문제