cpp 파일에서 C++ 클래스의 개인 데이터 멤버를 사용자로부터 숨기는 방법이 있습니까? 민간 구성원을 구현의 일부로 생각하며 헤더 파일에서 선언 할 때 약간 뒤로 향한 것처럼 보입니다.비공개 데이터 멤버를 숨기고 있습니까? (C++)
32
A
답변
52
"핌플 (pimpl)"관용구는 이것이 일반적으로 어떻게 처리 되는가입니다.
는
4
이 작업을 수행하는 고전적인 방법은 내부 클래스에 대한 프록시 포인터입니다 (C++ 11 업데이트)를 참조한다 기능을 구현합니다. 내가 아는 C++에서 부분 클래스 정의를 수행 할 방법이 없습니다.
8
는 광고를가는 PIMPL 관용구
8
보기? ;)
공개 및 보호 된 API 만 선언하는 헤더 파일을 만들 수 있습니다.
사용자에게 표시 할 수있는 내용 만 표시됩니다. 그들은 완전한 API와 정의를 사용하여 작성한 라이브러리와 코드를 연결합니다.
인라인 함수의 경우 : 인라인 함수의 경우 : 인라인되지 않은 코드에서 사용되는지 확인한 다음 라이브러리에서 사용할 수있는 정의가 있어야합니다 (그러나 사용자 구현에서 인라인 될 수는 없습니다).
템플릿 코드의 경우 실제적인 방법은 없습니다. 한 가지 해결책은 다른 오브젝트 유형으로 템플릿 코드를 사용하는 코드를 작성하는 것입니다. 사용자는 라이브러리에서 사용할 수있는 유일한 정의이기 때문에 이러한 항목으로 제한됩니다.
+5
쳇, 여기서 빨리 돌아와야 해. –
1
같은 것을 사용할 Pimpl Idiom
관련 문제
- 1. CLASS 비공개 프라이버시 데이터 멤버를 변경할 수 있습니까?
- 2. 이클립스는 항상 콘텐트 어시스트에서 비공개 멤버를 보여줍니다.
- 3. 데이터 멤버를 내보내는 것이 맞습니까? (C++)
- 4. 삭제 후 C++ 멤버를 사용할 수 있습니까?
- 5. ZendAMF에는 비공개 회원이 있습니까?
- 6. 어떤 멤버 함수도 C++ 클래스의 데이터 멤버를 변경하지 못하도록하십시오.
- 7. C++에서 공용 멤버 아래에 private 멤버를 정의하는 이유는 무엇입니까?
- 8. 처음부터 내 창을 숨기고 있습니까?
- 9. 데이터 멤버를 보유하기 위해 부모 클래스를 도입해야합니까?
- 10. 클래스와 같은 데이터 구조의 멤버를 공개 하시겠습니까?
- 11. 상속 : 기본 클래스 데이터 멤버를 재정의 할 수 있습니까?
- 12. 메서드가 아닌 데이터 멤버를 동기화 할 수 있습니까?
- 13. PHP에서 데이터 멤버를 동적으로 추가 할 수 있습니까?
- 14. 데이터 템플릿 내에 ListBoxItem의 태그 멤버를 설정합니까?
- 15. std :: auto_ptr 데이터 멤버를 사용하여 UB를 호출합니까?
- 16. Java에서 제한없는 비공개 컬렉션이 있습니까?
- 17. 메서드 또는 데이터 멤버를 찾을 수 없습니다.
- 18. 비공개 확장 방법을 사용해 본 적이 있습니까?
- 19. Intellisense에서 클래스 멤버를 표시하는 방법에 영향을주는 C#의 속성이 있습니까?
- 20. C#에서는 개체가 기본적으로 자신을 참조하는 데이터 멤버를 가질 수 있습니까?
- 21. RhinoMock으로 비공개 필드 모의
- 22. C++의 비공개 함수와 정적 함수
- 23. (C#) 읽기 전용 개인 모음 멤버를 반복합니다.
- 24. C++ - 클래스에서 포인터 멤버를 사용해야하는 경우
- 25. 왜 고수가 내 마우스 포인터를 숨기고 있습니까?
- 26. Drupal : 결과를 표시하기 위해보기를 숨기고 있습니까?
- 27. jquery accordion - 상위 요소를 숨기고 있습니까?
- 28. JInternalFrame의 제목 표시 줄을 숨기고 있습니까? -java
- 29. ListView ArrayAdapter, Row 내부에 자식을 숨기고 있습니까?
- 30. 공개 및 비공개 회원을 만드는 방법은 무엇입니까?
감사합니다. 이제 작동합니다. 이 두 기사는 이디엄을 잘 설명합니다. – jeffythedragonslayer
성능에 영향을 줍니까? – jjxtra
일반적으로 개인 정보에 액세스 할 때마다 역 참조 관계가 있으므로 성능에 영향을 미칠 수 있습니다. 그러나 컴파일러는 영향을 무시할 수 있도록 컴파일러를 최적화 할 수 있습니다. –