C++에서 private은 클래스 멤버의 기본 표시이지만 struct에 대한 public은 왜입니까?C++ 클래스/구조체 멤버의 기본 표시
35
A
답변
61
C++는 C의 상위 집합으로 도입되었습니다. 구조체는 C에서 가져 오며, 여기서 구성원의 의미는 공개 된 것입니다. 구조체를 사용하는 C++로 작업하기를 원하는 라이브러리를 포함하여 전체적으로 많은 C 코드가 존재합니다. 클래스는 C++에서 도입되었으며 캡슐화의 OO 철학을 준수하기 위해 멤버는 기본적으로 비공개입니다.
1
아마도 C 구조체와의 하위 호환성 때문일 수 있습니다. C 코드로 선언 된이 구조체는 C++ 코드에서 사용될 때와 같은 방식으로 계속 작동합니다.
7
클래스는 객체 지향을 수행하는 일반적인 방법이기 때문에 멤버 변수는 private이어야하며 공용 접근자가 있어야합니다. 이는 low coupling을 만드는 데 유용합니다. 반면 구조체는 항상 public 인 C 구조체와 호환되어야하며 (C에서는 public 및 private의 개념이 없음) 접근 자/변형자를 사용하지 않아야합니다.
관련 문제
- 1. C# 기본 권한 표시
- 2. C++ 클래스 멤버의 기본값은 무엇입니까
- 3. PropertyGrid에서 열거 형 멤버의 표시 이름 편집
- 4. C++ : 클래스 데이터 멤버의 초기화 순서
- 5. 정적 클래스 멤버의 초기화
- 6. 구조체 멤버의 크기를 결정하는 일반적인 C/C++ 매크로는 무엇입니까?
- 7. 구조체/클래스 멤버의 명시적인 초기화
- 8. 데이터 구조체 멤버의 멤버 초기화
- 9. 다양한 FormStartPosition 멤버의 가치를 얻으려면 어떻게해야합니까?
- 10. 보호 된 멤버의 범위
- 11. 정적 멤버의 가비지 수집
- 12. 파생 클래스의 ctor가 실행될 때까지 C++ 기본 클래스에서 멤버의 초기화를 지연하는 방법은 무엇입니까?
- 13. 리플렉션 C# 4를 사용하여 개인 멤버의 값을 얻는 방법
- 14. C++의 생성자 - 비 정적 데이터 멤버의 잘못된 사용
- 15. 어떻게 개인 멤버의 값을 얻을 싶어요 C#을
- 16. 특정 멤버의 CustomAttributes 가져 오기
- 17. 열거 형 멤버의 문자열 화
- 18. 클래스 멤버의 함수 포인터 전달
- 19. 클래스 멤버의 범위를 개인적으로 제한하기
- 20. ASP.NET MVC : 멤버의 LastSeen 업데이트
- 21. 클래스 멤버의 사용자 지정 속성
- 22. F를 사용하는 유형 멤버의 튜플 #
- 23. 정적 클래스 멤버의 올바른 사용
- 24. 템플릿 멤버의 멤버 함수 호출
- 25. MDX 계산 멤버의 값 추출
- 26. EditText 위젯에 기본 날짜 표시
- 27. 기본 편집기를 시각적으로 표시 하시겠습니까?
- 28. PHP의 클래스 메서드의 기본 표시
- 29. Java의 JScrollPane의 기본 표시 영역
- 30. 생성자 이니셜 라이저에있는 멤버의 멤버 함수를 사용합니다.
음, 캡슐화가 모든 구성원에게 개인적으로 꼭 필요한 것은 아닙니다. C++ 인라이닝을 사용하면 액세서 메소드가 매우 저렴해질 수 있지만 함수 호출의 오버 헤드가있는 많은 OOP 언어에서 사람들은 공용 액세스를 저렴하게 사용하는 경향이 있습니다. 좀 더 세밀하게 제어하기 위해 lang이 속성을 지원하면 속성 선언을 사용할 수 있습니다. 그러나 네이티브 코드에서 변수 변경 내용을 추적하는 것이 관리되는 언어보다 어렵 기 때문에 코드에서 단일 지점을 통해 특성을 설정하는 것이 좋습니다. – progician