Tôi nghi ngờ có liên quan đến các chức năng của bạn bè trong C++. Hàm friend không phải là hàm thành viên của các claas và có thể được gọi trực tiếp từ chính. Vì vậy, điều gì sẽ khác biệt nếu chúng tôi giữ chức năng friend
trong phần private
hoặc public
một phần của class
. Tôi thường nhận thấy rằng các chức năng friend
luôn ở phần công khai. Trong trường hợp nào chúng ta nên giữ hàm friend
trong phạm vi private
.Chức năng của bạn bè trong C++
Trả lời
Trình biên dịch không chú ý đến việc liệu chức năng của bạn bè có ở phần riêng tư hoặc công cộng (hoặc được bảo vệ) của một lớp hay không. Hầu hết mọi người đặt nó trong phần công khai, nhưng nó sẽ được hiển thị công khai bất kể nơi bạn đặt nó.
Không quan trọng nếu bạn khai báo trong phần public:
hoặc private:
của lớp học. Nó sẽ hoạt động như nhau bất kể.
Một lý do cho việc khai báo bạn bè trong phần private
là nó có thể giữ chúng cùng với các hàm thành viên hoặc các đối tượng mà chúng được cho là có quyền truy cập.
Ngoài ra, không có sự khác biệt.
Từ khóa friend
chỉ ở đây để cấp quyền truy cập private
cho một chức năng khác mà không phải là một phần của lớp học của bạn. Vì nó không phải là một phần của lớp học của bạn, nó không bị ảnh hưởng bởi public/private
thông số kỹ thuật.
không quan trọng bạn đặt tuyên ngôn hữu nghị ở đâu. Nó có thể tồn tại bên trong bất kỳ bộ phận nào của lớp học (công khai, riêng tư hoặc được bảo vệ) nhưng phải được đặt bên ngoài bất kỳ chức năng hoặc tổng hợp nào.
Dưới đây là một ví dụ tốt đẹp và lời giải thích từ www.cprogramming.com:
Nó thường là hữu ích cho một lớp để xem các biến riêng của lớp khác, mặc dù các biến này nên có lẽ không được thực hiện một phần của giao diện công khai mà lớp đó hỗ trợ. Ví dụ, nếu bạn đang viết một cây nhị phân, bạn có thể muốn sử dụng lớp Node có dữ liệu riêng tư, nhưng nó vẫn thuận tiện cho các hàm kết hợp các nút với nhau để có thể truy cập trực tiếp dữ liệu mà không cần phải làm việc thông qua giao diện Nút. Đôi khi, thậm chí có thể không phù hợp với chức năng truy cập tới thậm chí còn cung cấp quyền truy cập gián tiếp vào dữ liệu.
- 1. Decltype và chức năng của bạn bè trong Visual Studio vs G ++
- 2. Có nên đi theo chức năng của thành viên hoặc chức năng bạn bè khi chức năng được cho là thay đổi trạng thái của đối tượng không?
- 3. Chức năng bạn bè C++ không thể truy cập các thành viên riêng
- 4. Lớp học bạn bè C++
- 5. bè chức năng từ một lớp templated
- 6. Bạn bè hội đồng trong C#
- 7. SQL để kết bạn và bạn bè của bạn bè của một người dùng
- 8. Bạn bè trong C++ có chung không?
- 9. Tại sao chức năng bạn bè được ưu tiên cho chức năng thành viên cho toán tử <<
- 10. bạn bè của google + api
- 11. lớp C++ với bạn bè mục tiêu
- 12. C - Thiết kế miễn phí của riêng bạn() chức năng
- 13. Thừa kế bạn bè trên C++?
- 14. Mô hình hóa bạn bè của các mối quan hệ bạn bè trong MongoDB
- 15. Một chức năng của dòng trong C?
- 16. Cách cho phép chức năng mẫu có quyền truy cập bạn bè (giống như)?
- 17. Các lớp bạn bè trong Mục tiêu-C
- 18. chức năng người bạn trong php?
- 19. Tại sao chức năng bạn bè này không thể truy cập thành viên riêng tư của lớp học?
- 20. Tạo một lớp bạn bè chỉ có quyền truy cập đặc biệt vào 1 chức năng của một lớp khác?
- 21. C# Các lớp bạn bè và thành phần OOP
- 22. làm cho bạn bè trăn và fortran
- 23. Tương tác của không gian tên và bạn bè trong C++?
- 24. Có cách nào để mô phỏng khái niệm bạn bè của C++ trong Java?
- 25. danh sách bạn bè trong facebook
- 26. Chức năng opcode trong C
- 27. mẫu bạn bè Nhiều chuyên
- 28. Chức năng của bạn có được xác định tự động trong lớp không?
- 29. chức năng ẩn trong C
- 30. Chức năng tương đương với "_getch()" của C trong Java?
Tôi không biết tại sao điều này lại nhận được phiếu bầu gần đây ... Đây là câu hỏi hoàn toàn hợp lý (nếu ít được nói). – ildjarn
+1 - "khi nào thiết kế tốt để thực hiện chức năng người bạn riêng" là một câu hỏi hoàn hảo. (Hoặc tại sao nó không bao giờ.) – djechlin
"Tuyên bố bạn bè có thể được đặt bất cứ nơi nào trong tuyên bố lớp. Nó không bị ảnh hưởng bởi các từ khóa kiểm soát truy cập." - http://en.wikipedia.org/wiki/Friend_function –