두 가지 메소드가있는 C++ 인터페이스가 있습니다. 이 인터페이스를 구현하는 모든 클래스는 두 가지 메소드 중 적어도 하나를 구현해야하지만 둘 다 정의 할 수 있습니다. 그러나 둘 다 정의 할 필요는 없습니다. 그런 상황에서 사용할 수있는 가장 좋은 패턴은 무엇입니까? 다음과 같은해당 메소드의 서브 세트를 통해 인터페이스 구현
답변
뭔가 :
문제는 이미 잘못도 클래스가 그것의 기반이되는 것입니다 이럴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
};
MyAbstractClass가 MyInterface에서 상속되지 않았습니다. 어쨌든 MyAbstractClass의 요점은 순수 가상 대신 MyInterface 메서드를 가상으로 만드는 이유는 무엇입니까? – ponayz
MyInterface가 누락 된 것에 대해 유감스럽게 생각합니다. 또한, OP는 _ "나는 두 가지 방법으로 C++ 인터페이스를 가지고있다."_ 그래서 Interface 예제를 들었다. – P0W
"WARN : operation not supported"와 같은 일을하는 기본 구현을 사용하여 비 순수 가상 인 MyInterface에서'foo'와'bar'를 만들기를 원합니다. – Ptaq666
.
사례 A : 클래스에는 주어진 메소드에 대한 정의가 있습니다. 기본 구현은 예상되는 동작을 제공해야합니다. 이 경우 당신은 자유롭게 그것을 무시할 수 있습니다.
사례 B : 메서드가 추상이므로 예상 한 방식으로 덮어 써야합니다. 그렇지 않으면 컴파일러가 컴파일되지 않습니다.
C++에서 "하나 또는 모두 덮어 씀"을 선언 할 방법이 없습니다. 주어진 클래스는 기대하는 바는 (매우) 나쁜 디자인입니다.
그래서 질문은 존재하지 않습니다. 존재하는 경우 문맥에 따라 다르므로 자세한 내용으로 대답 할 수 없습니다.
- 1. JUnit @Test 메소드의 서브 세트를 실행 중
- 2. Object args가있는 인터페이스 메소드의 Java 호출 구현
- 3. 하나의 인터페이스 메소드의 다른 유형 구현
- 4. 인터페이스에서 메소드의 중복 구현. 리팩토링
- 5. groovy 인터페이스 메소드의 속성
- 6. 메소드의 모든 가지를 테스트하기 위해 Mockito의 응답 인터페이스 구현
- 7. 인터페이스 간 구현 (resharper)
- 8. 인터페이스 구현 인터페이스 4
- 9. 인터페이스 내에 인터페이스 구현
- 10. vb.net 및 인터페이스 구현
- 11. 메소드의 조건부 구현
- 12. 인터페이스에서 메소드의 기본 구현
- 13. 이벤트를 사용하여 폼 클래스를 통해 인터페이스 구현
- 14. 명시 적 인터페이스 인터페이스 메소드의 기본 클래스 구현을 어떻게 호출합니까?
- 15. linq 특정 서브 세트를 추출합니다
- 16. 인터페이스 구현
- 17. 인터페이스 구현
- 18. 시계열의 서브 세트를 R
- 19. data.frame에서 서브 세트를 추출하십시오.
- 20. Ruby에서 인터페이스 메소드의 구현을 강제하는 방법이 있습니까?
- 21. 일반 인터페이스 구현
- 22. C에서 다중 인터페이스 구현
- 23. 인터페이스 메소드의 반환 유형은 무엇입니까
- 24. 인터페이스 구현 (인터페이스 분리 원칙)
- 25. 인터페이스 구현 vs. 인터페이스 제공
- 26. 충돌하는 인터페이스 구현
- 27. 추상 클래스, 인터페이스 또는 추상 메소드의 사용법
- 28. 다이아몬드 상속 (인터페이스 구현)
- 29. IEnumberable 인터페이스 구현
- 30. ICollection 구현 및 인터페이스 이해
어떤 문맥에서이 수업을 사용하고 있습니까? 당신은 정교하게하고 싶을지도 모르다. 메모를 기반으로 의견을 기반으로하는 질문을 꺼내십시오 - –
클래스를 사용하여 인터페이스를 구현하려면 전체 인터페이스를 구현해야한다고 생각합니다. 특정 클래스의 공통 구현에 오버로드를 원하십니까? – ponayz
인터페이스를 2로 분할하고 각각에 하나의 메소드를 넣으십시오. 클래스는 이제 하나 또는 두 개의 인터페이스를 구현할 수 있습니다. 인터페이스는 계약으로 간주되어야합니다 (이 모든 것을 구현합니다). –