문제

클래스 내부에 속한 클래스 내부 및 클래스 내부의 기능 프로토 타입을 사용하여 클래스 내부에서 멤버 기능을 프로그래밍하는 것을 보았습니다. 나는 첫 번째 방법을 사용하여 프로그래밍 한 적이 있지만 다른 방법을 사용하는 것이 더 나은 연습인지 개인 선호도를 사용하는 것이 더 나은지 궁금했습니다.

도움이 되었습니까?

해결책

C ++를 의미한다고 가정하면 항상 함수를 정의하는 것이 좋습니다. 밖의 클래스의 클래스 내부에 넣으면 컴파일러가 내려 가려고 할 수 있기 때문에 항상 바람직하지는 않습니다.

  1. 코드 크기 증가 (이 헤더를 포함하는 모든 객체 파일은 코드의 함수 사본으로 끝날 수 있음).
  2. 기능 정의가 변경 될 때 이진 호환성 중단.

인라인 기능이 있더라도 대개 기능이 사소한 액세서 또는 다른 원 라이너가 아닌 한, 클래스 외부의 정의를 클래스 외부에 배치하는 것이 더 좋습니다.

다른 팁

C ++의 경우 헤더 파일에 메소드 정의를 넣는 것은 주어진 헤더가 포함 된 모든 것이 구현 세부 사항 일지라도 헤더가 변경 될 때 다시 컴파일해야 함을 의미합니다.

헤더에서 정의를 움직이는 것은 헤더 자체가 변경 될 때만 헤더를 포함하는 파일을 다시 컴파일해야 함을 의미합니다 (함수가 추가/제거 또는 선언이 변경됨). 이것은 복잡한 프로젝트의 컴파일 시간에 큰 영향을 줄 수 있습니다.

두 기술 모두에는 이점이 있습니다.

클래스 정의에 프로토 타입 만 배치하는 경우 클래스를 사용하는 사람이 사용할 수있는 방법을 쉽게 확인할 수 있습니다. 구현 세부 사항에 의해 산만 해지지 않습니다.

클래스 정의에 직접 코드를 넣으면 클래스를 사용하는 것이 더 간단 해져서 #include header 만 있으면됩니다. 이것은 템플릿 클래스에서 특히 유용합니다 (필요).

언어가 C ++라고 가정합니다.

결론은 개인 취향입니다. 수업 내부는 전체적으로 더 짧고 특히 직접적입니다.

int getFoo() const { return _foo; }

기능 유형. TE 클래스 외부에서는 클래스 정의에서 "클러 터"를 제거 할 수 있습니다.

나는 사용중인 것을 모두 보았다 ...

물론, 감동되지 않은 기능은 항상 클래스 외부에 있습니다.

클래스를 정의 할 때 두 스타일을 혼합하는 것도 일반적입니다. 1 또는 2 줄로 구성된 간단한 방법의 경우 클래스 정의 내에서 메소드 본문을 정의하는 것이 일반적이며 편리합니다. 더 긴 방법을 위해서는 외부를 정의하는 것이 좋습니다. 메소드 본문과 혼란스럽지 않고 더 읽기 쉬운 클래스 정의를 가질 수 있습니다.

방법의 구현을 숨기는 것은 실제 구현에 의해 클래스 사용자가 산만 해지지 않거나 나중에 변경 될 수있는 구현에 대한 가정을한다는 점에서 유리합니다.

나는 당신이 C ++에 대해 이야기하고 있다고 가정합니다.

멋지고 깨끗한 인터페이스를 갖는 것은 확실히 좋은 생각입니다. 별도의 구현 파일을 사용하면 인터페이스를 깨끗하게 유지하는 데 도움이됩니다.

또한 컴파일 시간을 줄입니다. 특히 사용하는 경우 불투명 포인터.

클래스 내에서 함수를 구현하면 여러 .cpp 파일에서 클래스를 #include 할 수 없거나 링커는 기능의 여러 정의에 대해 불평합니다.

따라서 일반적인 관행은 .h 파일의 클래스 정의와 .cpp 파일 (일반적으로 동일한 이름)의 멤버 구현을하는 것입니다.

다시, C ++를 암시하면, 나는 보통 가상 함수에 대한 자리 표시 자에게 이것을 제한합니다.

virtual int MyFunc() {}  // Does nothing in base class, override if needed

앤드류 메디코의 포인트는 너무 쉽게 차고 컴파일 시간을 아프게합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top