멤버 함수가 클래스의 내부와 외부에 모두 프로그래밍되었고 클래스 내부에 함수 프로토 타입이 있습니다. 첫 번째 방법을 사용하여 프로그래밍 한 적이 있지만 다른 선호도를 사용하는 것이 더 나은지 궁금해하십니까? 당신은 C++을 의미 가정멤버 함수를 프로그래밍 할 때 더 좋은 방법은 무엇입니까?
답변
, 당신이 클래스 안에 넣어 경우, 컴파일러는 항상 바람직하지 않은, 그것을 인라인 시도 할 수 있기 때문에, 클래스의 외부 기능을 를 정의하는 것이 더 낫다 :
- 코드 크기가 증가합니다 (이 헤더를 포함하는 모든 객체 파일은 해당 코드의 함수 사본으로 끝날 수 있음).
- 함수 정의가 변경 될 때 바이너리 호환성이 깨어납니다.
심지어 인라인 기능, 그것은 일반적으로 더 나은 기능은 사소한 접근 또는 다른 한 줄이 아닌, 클래스 공용 인터페이스의 가독성을 개선하기 위해 클래스 외부 정의를 넣어하는 것입니다.
클래스 내에 멤버 함수가 구현되어 있는지 여부는 컴파일러가 인라인하려고 시도하는지 여부와 관련이 없습니다. –
죄송합니다, 이것은 올바르지 않습니다 : http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.8 –
나 자신을 바로 잡아야합니다. 자동으로 인라인 멤버가 내부적으로 구현 된 컴파일러가있을 수 있습니다. 클래스 정의. 그러나이 동작은 compiler-specicif이며 모든 C++ 컴파일러에서 true로 간주 할 수 없습니다. –
두 기술 모두 장점이 있습니다.
프로토 타입 만 클래스 정의에 배치하면 클래스를 사용하는 사람이 어떤 방법을 사용할 수 있는지 쉽게 알 수 있습니다. 구현 세부 사항에주의를 기울이지 않습니다.
코드를 클래스 정의에 직접 넣으면 클래스를 사용하는 것이 더 간단 해지고 # 헤더 만 포함하면됩니다. 이것은 템플릿 기반 클래스에서 특히 유용합니다 (필수).
구현 세부 사항은이 부분의 큰 부분을 차지합니다. –
언어를 추정하는 것은 C++입니다 :
결론은 개인적인 취향입니다. 수업 내에서는 전반적으로 짧고 특히 더 구체적입니다. 특히
유형의 기능입니다. 외부 클래스는 클래스 정의에서 "클러 터"를 제거 할 수 있습니다.
내가 모두 사용 ... 물론
이 아닌 인라인 함수는 클래스 외부 항상 보았다.
나는 C++에 대해 이야기하고 있다고 가정합니다.
멋지고 깨끗한 인터페이스를 갖는 것이 좋습니다. 별도의 구현 파일을 사용하면 인터페이스를 깨끗하게 유지하는 데 도움이됩니다.
특히 컴파일 시간이 단축됩니다 (특히 opaque pointer을 사용하는 경우).
클래스를 정의 할 때 두 스타일을 혼합하는 것이 일반적입니다. 1 또는 2 행으로 구성된 간단한 메소드의 경우 클래스 정의 내에서 메소드 본문을 정의하는 것이 일반적이며 편리합니다. 좀 더 긴 메소드의 경우 외부 적으로 정의하는 것이 좋습니다. 메소드 몸체를 어지럽히 지 않고보다 읽기 쉬운 클래스 정의를 갖게 될 것이다.
메소드의 구현을 숨기는 것은 클래스의 사용자가 실제 구현에 방해되지 않도록하거나 나중에 변경 될 수있는 구현에 대한 가정을하는 데 유용합니다.
클래스 내에 함수를 구현하면 클래스를 여러 .cpp 파일에 # 포함 할 수 없거나 링커에서 여러 함수 정의에 대해 불만을 토로합니다.
따라서 일반적으로 .h 파일의 클래스 정의와 .cpp 파일의 멤버 구현 (대개 같은 이름)을 사용하는 것이 일반적입니다.
C++의 경우 메서드 정의를 헤더 파일에 두는 것은 헤더가 변경 될 때 주어진 헤더가 포함 된 모든 내용을 다시 컴파일해야 함을 의미합니다.
헤더에서 정의를 이동하면 헤더 자체가 변경 될 때 (함수 추가/제거 또는 선언 변경)에만 헤더를 포함하는 파일을 다시 컴파일해야합니다. 이것은 복잡한 프로젝트의 컴파일 시간에 큰 영향을 줄 수 있습니다.
다시 말하지만, 저는 이것을 보통 가상 함수의 자리 표시 자로 제한합니다.
virtual int MyFunc() {} // Does nothing in base class, override if needed
Andrew Medico의 요점은 너무 쉽게 시작되어 컴파일 시간이 아플 수 있습니다.
- 1. 멤버 변수 이전에 멤버 함수를 배치하는 이유는 무엇입니까?
- 2. 컨테이너 요소에 함수를 적용 할 때 더 나은 이름이 필요합니다.
- 3. 멤버 함수를 호출 할 때 'this'매개 변수는 언제 평가됩니까?
- 4. 정규식으로 함수를 찾는 가장 좋은 방법은 무엇입니까?
- 5. 개체가없는 멤버 함수를 호출 할 수 없습니다.
- 6. 조건부로 함수를 실행하는 가장 좋은 방법은 무엇입니까?
- 7. 이벤트를 검색하는 더 좋은 방법은?
- 8. C++ 객체에 대한 포인터가 주어지면 정적 멤버 함수를 호출하는 가장 좋은 방법은 무엇입니까?
- 9. 함수를 호출 할 때이 스레드를 종료하는 가장 좋은 방법은 무엇입니까?
- 10. 이미지의 크기를 조정하는 더 좋은 방법은 무엇입니까?
- 11. 템플릿 기본 클래스에서 템플릿 멤버 함수를 호출하는 방법은 무엇입니까?
- 12. 멤버를 반복하고 함수를 호출하여 함수를 호출 할 때 함수를 호출합니다.
- 13. 내가 할 수있는 더 좋은 방법은 무엇입니까? asp.net mvc
- 14. 반환 할 때 함수를 호출하는 방법
- 15. ImageView를 움직이는 것이 더 좋은 방법은 무엇입니까?
- 16. 이 기능을 구성하는 더 좋은 방법은 무엇입니까?
- 17. XML 문서를 비교하는 더 좋은 방법은 무엇입니까?
- 18. 더 좋은 방법은 자바 스레드?
- 19. 비 클래스 함수 포인터로 클래스 멤버 함수를 호출하는 방법은 무엇입니까?
- 20. 프로그래밍/코딩 할 때 사용하는 글꼴은 무엇입니까?
- 21. 해당 함수를 다른 번역 단위에서 링크 할 경우 클래스의 멤버 함수를 정의 할 수없는 이유는 무엇입니까?
- 22. LINQ를 사용하는 더 좋은 방법은 무엇입니까?
- 23. 파이썬에서 이것을 처리하는 더 좋은 방법은 무엇입니까?
- 24. 성능 향상을 위해 더 좋은 방법은 무엇입니까?
- 25. 안드로이드에서 데이터베이스와 통신하는 더 좋은 방법은 무엇입니까?
- 26. CSS 스타일을 설정하는 더 좋은 방법은 무엇입니까?
- 27. jquery mouseover의 더 좋은 방법은 무엇입니까?
- 28. 날짜별로 정렬하는 더 좋은 방법은 무엇입니까?
- 29. F # : 멤버 함수를 언 바운드 함수로 사용하는 방법은 무엇입니까?
- 30. * .cpp 파일에서 정적 클래스 멤버 함수를 구현하는 방법은 무엇입니까?
당신은 말하지 않았지만이 C++입니까? –
어떤 언어입니까? C++? –