2013-08-27 4 views
0

글쎄, 이것은 꽤 사소한 질문이다. 하지만 하나의 헤더/소스 파일에 여러 클래스를 넣어도 괜찮은지 알고 싶습니다. 나는 종종 모든 클래스에 다른 헤더와 다른 소스 파일이 있다는 것을 알았다. (컨벤션뿐 아니라 ...)C++ 규약 : 헤더와 클래스의 구조

나는 여기에서 기복을 본다. 큰 프로젝트는 때로는 그들을 검색해야하기 때문에 편집을 위해 한 곳에서 관련 클래스를 갖고 싶어 할 수도 있습니다. 반면에 파일이 많을수록 단일 파일의 무거움이 적어 지므로 검색하는 방법에 도달하기 위해 줄 바꿈을하지 않아도됩니다.

이제는 협약에서 이에 대해 무엇을 말합니까? 서버는 서버와 ServerManager 클래스 용 ClientHandler에 :

[실시 예] 순간

난 하나 개의 파일 3 개 종류가있다. 서버가 연결을 관리하면 ClientHandler가 각 클라이언트의 모든 송신 및 송신 트래픽을 관리하며 ServerManager에는 서버를 실행하는 데 필요한 일부 논리가 포함됩니다.

[편집] 영어 언어의 내 능력을 가진 부드럽게, 내가 외국 해요) 그것은 자신의 헤더/구현 쌍을 가지고 각 클래스에 대한 좋은 형태로 간주

+0

그것은 자신의 파일에 각 개체 클래스를 배치하는 것이 일반적이다, 오직 파일 더 클래스/구조체를 보유 할 수있는이 도구 상자 클래스처럼 (기하학 예를 들어, 원, 사각형의 클래스 유지 기능 등). 기능과 마찬가지로, 한 문장 이상 필요한 경우 함수를 분리하십시오.클래스가있는 파일이 있고 파일의 내용을 설명하기 위해 여러 섹션이 필요한 경우 파일을 분할하십시오. – SinisterMJ

+0

"common"은 쉽게 말할 수 있습니다. 문제는 여기에 누군가가 "그 코드를 보여 주면 ..."라고 말하고 싶습니다. –

+0

@Manhattan,! @ # $는 프로젝트가 충분히 큰 경우 적절한 응답이 될 것입니다. . 각 클래스를 자신의 파일에 넣는 것이 좋은 형태입니다. – Vivek

답변

2

.

가장 매력적인 이유는 파일에 포함 된 클래스의 이름이 지정된다는 것입니다. 이렇게하면 코드에서 올바른 선언 파일을 쉽게 찾을 수 있습니다. 파일에 둘 이상의 유형이있는 경우 이름을 지정하기가 어려워지고 따라서 유지 관리가 더 어려워집니다.

그러나 때로는 분명히 잘리지 않습니다. "main"클래스는 인터페이스의 허브 스터 (Herb Sutter) 인터페이스에서 분명히 일부 지원되는 다른 지원 클래스를 가질 수 있지만 중첩 된 유형으로 올바르게 포함되지는 않습니다. 이것은 드문 경우 여야하지만,이 경우에는 파일 당 둘 이상의 클래스가있는 것을 정당화 할 수 있습니다.

개념을 추출하는 데 어려움이 있다면 (예를 들면 예제에서와 같이) 조금씩 가서 자신의 파일에 넣어 보지 않으시겠습니까? 당신 라인을 내려 주셔서 감사합니다!

+0

당신이 맞다고 생각합니다. –

+0

무료 기능에 대해 어떻게합니까? 그것이 좋은 형태 이건 아니건간에 그 종류에 달려 있습니다. 현재 작업하고있는 응용 프로그램에서 약 2/3의 클래스가 헤더에 정의되어 있지 않지만 소스 파일에 정의되어 있습니다. 방문자 또는 관찰자 인터페이스는 방문자가 방문하거나 관찰하는 것과 동일한 헤더에 정의되어야합니다. –

+0

파일의 추상화 후에는 파일의 이름을 지정하는 경향이 있고 C++ (및 C#)에서도 클래스의 이름을 의미합니다. C++에서 * 인터페이스 *에 속한 자유 함수는 동일한 추상화에 속하는 것으로 공동 위치합니다. 소스에서 정의 된 클래스는 추상화가 아니라 (IME, 어쨌든) 도우미이므로 어떠한 경우에도 다른 사고 방식이 필요합니다. 나는 당신과 동의한다. 규칙 : – SteveLove

1

상식 외에도 실제 규칙은 없습니다. 두 클래스 이 밀접하게 연결된 경우에는 동일한 머리글에 넣는 것이 일반적입니다. 물론 C++의 모든 것이 클래스가 아닙니다. 자유 함수 은 에 따라 다양한 헤더로 그룹화 될 수 있습니다.

또한, 헤더와 소스 파일 간에는 일대일 관계가 항상있는 것은 아닙니다. 클래스가 템플릿 인 경우 은 소스 파일이 아닐 수도 있습니다. 당신이 널리 사용되는 라이브러리를 작성 을하고 있으며, 다른 한편, 만약 클래스는 당신이 아마 별도의 소스 파일에 각 기능을 넣어하는 것이 좋습니다, 다형성하지 입니다.

그리고 많은 클래스가 헤더 파일이 아니라 소스 파일에 직접 정의되어 있습니다.

+0

관련 노트에, 나는 많은 이미지 처리를하는 매우 큰 클래스를 가진이 프로젝트를 진행하고 있었다. 나는이 규범을 물려 받았고, 수업의 배짱은 약 12 ​​개의 스크린 풀의 곡에 대한 단 하나의 방대한 방법이었다. 그 기능을 다수의 파일로 구현 된 수많은 기능으로 나누었습니다. 이 분할은 가독성, 테스트 가능성을 높이고 컴파일러는 각각의 작은 변경 후에 컴파일 작업이 훨씬 적기 때문에 디버그 빌드 테스트 사이클을 줄였습니다. 이것은 내게 상식처럼 보였다. 특별한 규칙을 따르지 않고 있었다. –

+0

@SchighSchagh 정확히. 상식은 여기서 가장 좋은 규칙입니다. (하지만 클래스와 함수를 작게 유지하면 클래스와 함수를 분리 할 수 ​​있습니다.) –