때때로 C++에서 클래스 정의에서 public 멤버는 처음에 선언되고 나중에 private됩니다. 그러나 변수 또는 데이터 멤버는 일반적으로 비공개이며 공용 메서드에서 사용됩니다. 따라서이 경우 변수는 사용되지만 아직 선언되지 않았습니다. 따라서 코드가 이해하기 어려워집니다. 그러나 유명한 프로그래머, 사이트 또는 서적에서 나중에 비공개 멤버를 선언 할 수있었습니다. 아무도 이유가 무엇인지 압니까?C++에서 공용 멤버 아래에 private 멤버를 정의하는 이유는 무엇입니까?
답변
내 수업 시간에 사용자가 비공개 멤버에 관심이 없기 때문에 나는 공개 API (즉, 내 수업 사용 방법)에 관심이 많아서 그런 식으로 일을합니다.
또한 헤더 파일에서 나는 일반적으로 멤버 함수를 정의하는 대신 멤버 함수를 선언하기 때문에 어쨌든 private 멤버에 액세스하지는 않습니다.
+1 : 헤더 파일은 클래스 사용자를위한 계약처럼 작동해야합니다. 구현이 거기에 속해 있지 않습니다. – kgiannakakis
물론 인라인 함수를 제외하고. 그러나 가장 사소한 경우를 제외하고는 모두 수업의 정의를 따라야합니다. – rlbond
@rlbond - 좋은 지적입니다. –
일반적으로 개인 회원은 중요하지 않습니다. 코드에서 다른 곳에서 사용하는 방법을 결정하기 위해 클래스를보고있는 경우에는 내부에 대해 신경 쓰지 않으므로 개인 멤버를 맨 아래에 배치해야합니다. 내가 그들에 대해 알 필요가 없으므로. 내가 "클래스를 수정 해요 경우 나는 private 멤버를 찾기 위해 시간을 그들이 대신 전체 클래스를 탈지 필요없이 바닥에있을거야 알
을 우리는 어느 쪽과 같다 :. My Question
제 생각에는 수업에 익숙해지면 공개 인터페이스에 처음 익숙해지면 도움이되며, 필요할 때 개인 회원들에게 더 깊이 들어가게됩니다. 개인 회원을보고 시작하면 문맥을 사용하는 방법
개인 회원 및 구현을 헤더 파일에서 숨길 수 있습니다. 개인 회원 정의를 하단에 배치하는 것이 빠른 방법입니다. 아마도 Pimpl idiom을 사용하고 클래스의 개인 부분을 내부 구조체에 숨기는 것이 좋습니다.
위에서 아래로 텍스트를 읽었으므로 관련성이 가장 높은 정보가 맨 위에 있어야합니다. 클래스 정의에서 그것은 공용 인터페이스입니다.
동의. 사적인 구성원은 하단에 선언해야합니다. 개인 멤버를 먼저 선언해야하는 유일한 이유는 함수가 다음과 같은 사용자 지정 데이터 형식을 가져 오거나 반환해야 할 때입니다. 컴파일러는 어떤 종류의 데이터인지 묻습니다.
은 그러나 심지어 그 경우에 내가 할 역자 주 :
{ 개인 : /// 아래에서보다 개인 프로그래머 OFC advicing! 이전 단지
공공 유형의 선언 :
개인 :
};
- 1. private 멤버 변수를 클래스 인스턴스별로 변경할 수있는 이유는 무엇입니까?
- 2. C++ static 멤버 함수에서 private 멤버 변수를 변경하십시오.
- 3. codeigniter : 모델에서 멤버를 정의하는 위치는 무엇입니까?
- 4. 공용 클래스 멤버
- 5. 액세서 대 공용 멤버
- 6. 벡터에서 객체의 private 멤버 검색 및 편집
- 7. C에서 구조체의 멤버를 volatile로 선언하는 방법은 무엇입니까?
- 8. private 클래스의 공용 클래스에서 메서드/필드에 액세스
- 9. Objective-C에서 "@private"는 무엇을 의미합니까?
- 10. 파일의 모든 공용 멤버를 자동으로 주석으로 처리합니다.
- 11. C에서 정의 정의하는 방법?
- 12. 주석을 정의하는 데 @interface가 사용되는 이유는 무엇입니까?
- 13. 변수를 private/public으로 설정해야하는 이유는 무엇입니까?
- 14. 멤버 변수 이전에 멤버 함수를 배치하는 이유는 무엇입니까?
- 15. javadoc에서 특정 클래스/패키지/공용 멤버를 제외하는 방법
- 16. 구성원 개체 - 공용 변수 만 액세스 할 수있는 이유는 무엇입니까?
- 17. 멤버 내의 멤버를 가리키는 EF 속성
- 18. DataContractSerializer : 멤버를 삭제하지 않는 이유는 무엇입니까?
- 19. main() 외부에서 정적 멤버를 초기화해야하는 이유는 무엇입니까?
- 20. Hash.new ({})가 해시 멤버를 숨기는 이유는 무엇입니까?
- 21. 클래스 멤버를 반복하는 방법은 무엇입니까?
- 22. 클래스 자체에서 데이터 멤버 또는 공용 속성을 사용합니까?
- 23. 헤더 파일이없는 경우 정적 멤버를 정의하는 방법은 무엇입니까?
- 24. 파이썬에서 단일 멤버 집합에서 멤버를 추출하는 방법은 무엇입니까?
- 25. C에서 private struct에 대한 포인터 전달?
- 26. C에서 동일한 유형의 구조체 멤버 반복 Iterating
- 27. 기본 클래스의 private 멤버를 자식 클래스의 public 멤버가되게하려면 어떻게합니까?
- 28. Objective-C에서 category를 사용하여 @private 인스턴스 변수에 액세스하는 방법은 무엇입니까?
- 29. ASP.NET private 멤버 필드는 다음과 같은 코드를 생각해 다시 게시
- 30. XmlSerializer에서 공용 속성을 serialize하지 않는 이유는 무엇입니까?
중복 : http://stackoverflow.com/questions/308581/how-should-i-order-the-members-of-ac-class –
기타 : http://stackoverflow.com/questions/778281/why -put-private-fields-and-the-the-top-of-class –