2014-11-30 3 views
-1

다른 포함에 이미 포함 된 파일을 포함 할 때 규칙은 무엇입니까?이미 포함 된 것으로 알려진 파일 포함

예 : 클래스베이스는 "base.h"로 선언되며 몇 개의 하위 클래스가 있습니다. Base는 가상 메소드 foo (Bar & bar)를 가지고 있으므로 "bar.h"를 포함합니다. 적절한 컨벤션 관점에서 볼 때 하위 클래스에 "bar.h"를 포함하는 "base.h"가 포함되면 하위 클래스에도 "bar.h"를 포함해야합니까?

+0

나는 이것이 의견 질문이라고 생각하며 그렇게 생각하지 않습니다. 어쨌든, 나는 모든 헤더에 절대적으로 필요한 것만 포함 시키려고 노력하지만 질문의 주제에 관해서는 그렇게 걱정하지 않아야한다. – drescherjm

+1

Sidenote : base.h가 bar.h의 정의를 다른 방법으로 참조하지 않는다면 bar.h를 base.h에 전혀 포함 할 필요가 없습니다. 'class bar '를 선언하는 것으로 충분합니다. – user2079303

+2

나는 "그러므로"를 사지 않는다. 나는 이렇게 쓸 수있다 :'class Bar; Foo {virtual Bar & f() = 0; }; ' –

답변

1

함수의 선언에 매개 변수를 선언하면되므로 해당 헤더를 포함해야합니다. 비 기본 클래스 또는 유형이 아닌 경우에는 정의가 포함되어야합니다. 다른 모든 것은 선언 만 필요하거나 구현 세부 사항이기 때문에 포함되는 간접 헤더에 의존해서는 안됩니다.

1

child.h에는 base.h와 bar.h를 모두 포함하는 것이 좋습니다. 이것은 가상 함수 종속성 임에도 불구하고 bar.h를 포함하여 미래의 개발자 (IDE가 없을 수도 있음)가 base.h를 읽지 않고도 선언문을 가리킬 수 있습니다.

다른 개발자가 bar.h에 대한 child.h의 의존성에 대해 염려 할 필요없이 base.h의 내용을 변경할 수 있기 때문에 비 가상 함수의 경우 둘 다를 포함하여 더 나은 imho 여야합니다.