Có cách nào để ẩn các thành viên dữ liệu cá nhân của lớp C++ khỏi người dùng, trong tệp cpp không? Tôi nghĩ rằng các thành viên tư nhân là một phần của việc thực hiện và có vẻ như một chút ngược lại để khai báo chúng trong tệp tiêu đề.Ẩn các thành viên dữ liệu riêng tư? (C++)
Trả lời
Thành ngữ "pimpl" là cách xử lý thông thường.
Xem
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (cập nhật cho C++ 11)
Cách cổ điển để làm điều này là với một con trỏ proxy để một lớp học nội mà thực hiện chức năng. Không có cách nào để làm các định nghĩa lớp một phần trong C++ mà tôi biết.
Xem Pimpl Idiom
bạn muốn sử dụng một cái gì đó giống như pImpl ngữ
sheesh, phải nhanh chóng ở đây –
Đi thương mại? ;)
Bạn có thể tạo tệp tiêu đề, trong đó bạn chỉ khai báo API công khai và được bảo vệ.
Người dùng chỉ được trình bày với những thứ này mà họ có thể đưa vào. Chúng liên kết mã của chúng với thư viện mà bạn đã xây dựng bằng cách sử dụng API hoàn chỉnh và các định nghĩa.
Đối với các chức năng nội tuyến: đảm bảo chúng được sử dụng trong mã không có nội tuyến, sau đó sẽ có định nghĩa trong thư viện (tuy nhiên, tôi không chắc chắn nó sẽ được đưa vào trong triển khai người dùng).
Đối với mã templated, không có cách nào thực sự xung quanh. Một giải pháp nửa vời là tạo mã, sử dụng mã templated với các kiểu đối tượng khác nhau. Người dùng sẽ bị giới hạn bởi vì chúng là những định nghĩa duy nhất có sẵn trong thư viện của bạn.
Cảm ơn, nó hoạt động ngay bây giờ. Hai bài báo này giải thích thành ngữ tốt. – jeffythedragonslayer
Điều này có bất kỳ tác động hiệu suất nào không? – jjxtra
Nói chung, có điều này có thể có một tác động hiệu suất, như có một dereference con trỏ liên quan bất cứ khi nào các công cụ tư nhân được truy cập. Tuy nhiên, một trình biên dịch có thể tối ưu hóa nó để tác động không đáng kể. –