2017-12-08 12 views
0

두 가지 메소드가있는 C++ 인터페이스가 있습니다. 이 인터페이스를 구현하는 모든 클래스는 두 가지 메소드 중 적어도 하나를 구현해야하지만 둘 다 정의 할 수 있습니다. 그러나 둘 다 정의 할 필요는 없습니다. 그런 상황에서 사용할 수있는 가장 좋은 패턴은 무엇입니까? 다음과 같은해당 메소드의 서브 세트를 통해 인터페이스 구현

+0

어떤 문맥에서이 수업을 사용하고 있습니까? 당신은 정교하게하고 싶을지도 모르다. 메모를 기반으로 의견을 기반으로하는 질문을 꺼내십시오 - –

+0

클래스를 사용하여 인터페이스를 구현하려면 전체 인터페이스를 구현해야한다고 생각합니다. 특정 클래스의 공통 구현에 오버로드를 원하십니까? – ponayz

+3

인터페이스를 2로 분할하고 각각에 하나의 메소드를 넣으십시오. 클래스는 이제 하나 또는 두 개의 인터페이스를 구현할 수 있습니다. 인터페이스는 계약으로 간주되어야합니다 (이 모든 것을 구현합니다). –

답변

0

뭔가 :

문제는 이미 잘못도 클래스가 그것의 기반이되는 것입니다 이럴
class MyInterface 
{ 
public: 
    virtual ~MyInterface() {} 

    virtual void foo() = 0; 
    virtual void bar() = 0; 
}; 


class MyAbstractClass : public MyInterface 
{ 
public: 
    virtual ~MyAbstractClass(); 

    // Provide implementation for foo or bar 
    virtual void foo() override { } 
    virtual void bar() override { } 
}; 

class MyNewClass : public MyAbstractClass 
{ 
    // Implement either of foo or bar or can be both 
}; 
+0

MyAbstractClass가 MyInterface에서 상속되지 않았습니다. 어쨌든 MyAbstractClass의 요점은 순수 가상 대신 MyInterface 메서드를 가상으로 만드는 이유는 무엇입니까? – ponayz

+1

MyInterface가 누락 된 것에 대해 유감스럽게 생각합니다. 또한, OP는 _ "나는 두 가지 방법으로 C++ 인터페이스를 가지고있다."_ 그래서 Interface 예제를 들었다. – P0W

+0

"WARN : operation not supported"와 같은 일을하는 기본 구현을 사용하여 비 순수 가상 인 MyInterface에서'foo'와'bar'를 만들기를 원합니다. – Ptaq666

0

.

사례 A : 클래스에는 주어진 메소드에 대한 정의가 있습니다. 기본 구현은 예상되는 동작을 제공해야합니다. 이 경우 당신은 자유롭게 그것을 무시할 수 있습니다.

사례 B : 메서드가 추상이므로 예상 한 방식으로 덮어 써야합니다. 그렇지 않으면 컴파일러가 컴파일되지 않습니다.

C++에서 "하나 또는 모두 덮어 씀"을 선언 할 방법이 없습니다. 주어진 클래스는 기대하는 바는 (매우) 나쁜 디자인입니다.

그래서 질문은 존재하지 않습니다. 존재하는 경우 문맥에 따라 다르므로 자세한 내용으로 대답 할 수 없습니다.