sách gpt4 ăn đã đi

c++ - C++ hiệu quả Mục 23 Ưu tiên các hàm không phải thành viên không phải bạn bè hơn các hàm thành viên

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 12:35:26 32 4
mua khóa gpt4 giày nike

Trong khi bối rối về một số thông tin thực tế về thiết kế lớp, cụ thể là liệu các hàm có nên là thành viên hay không, tôi đã xem xét C++ hiệu quả và tìm thấy Mục 23, Ưu tiên các hàm không phải là thành viên không phải là bạn bè hơn là các hàm thành viên. Đọc trực tiếp phần này bằng ví dụ về trình duyệt web có ý nghĩa, nhưng các hàm tiện lợi trong ví dụ đó (được đặt tên là các hàm không phải thành viên như thế này trong sách) sẽ thay đổi trạng thái của lớp, phải không?

  • Vì vậy, câu hỏi đầu tiên, họ có nên là thành viên không?

  • Đọc thêm, anh ấy xem xét các hàm STL, những chức năng này thực sự được triển khai trong STL mà không được một số lớp nhất định triển khai. Theo dòng của cuốn sách này, chúng phát triển thành các hàm tiện lợi được đóng gói vào một số không gian tên hợp lý, ví dụ: std::sắp xếpstd::sao chép từ thuật toán. Ví dụ,vector lớp không loại chức năng, trong khi sử dụng STL loại hàm, vì vậy nó không phải là thành viên của lớp vectơ. Nhưng lý do tương tự cũng có thể được mở rộng sang một số hàm khác trong lớp vectơ, ví dụ: giao phó , do đó nó không thể được triển khai với tư cách thành viên mà là một chức năng tiện lợi. Tuy nhiên, điều này cũng thay đổi trạng thái bên trong của đối tượng, chẳng hạn như thứ tự hoạt động của đối tượng. Vậy đâu là lý do đằng sau câu hỏi tế nhị nhưng quan trọng này (tôi đoán vậy).

Nếu bạn có quyền truy cập vào cuốn sách này, bạn có thể giúp tôi giải thích những điểm này không?

câu trả lời hay nhất

Không cần thiết phải truy cập cuốn sách này.

Vấn đề chúng ta đang giải quyết ở đây làphụ thuộcTái sử dụng

Trong phần mềm được thiết kế tốt, bạn cố gắng tách biệt các dự án với nhau để giảm sự phụ thuộc, bởi vì sự phụ thuộc là một trở ngại cần vượt qua khi cần thực hiện thay đổi.

Trong phần mềm được thiết kế tốt, bạn áp dụng KHÔ Nguyên tắc (đừng lặp lại chính mình), vì khi cần thực hiện một thay đổi, việc phải lặp lại hàng chục chỗ khác nhau là điều khó khăn và dễ mắc lỗi.

Cách suy nghĩ OO "cổ điển" ngày càng tệ trong việc xử lý các phần phụ thuộc. Bằng cách dựa trực tiếp vào một số lượng lớn các phương thức bên trong lớp, một thay đổi nhỏ nhất cũng có nghĩa là phải viết lại toàn bộ. Nó không nhất thiết phải theo cách này.

Trong C++, STL (không phải toàn bộ thư viện chuẩn) được thiết kế với mục tiêu rõ ràng là:

  • Cắt phụ thuộc
  • Cho phép tái sử dụng

Do đó, các vùng chứa hiển thị các giao diện được xác định rõ ràng, ẩn phần trình bày bên trong của chúng nhưng vẫn cung cấp quyền truy cập đầy đủ vào thông tin mà chúng đóng gói để có thể thực thi các thuật toán trên chúng. Tất cả các sửa đổi được thực hiện thông qua giao diện container để đảm bảo tính bất biến.

Ví dụ, nếu bạn xem xét loại yêu cầu thuật toán. Để triển khai mà STL (nói chung) sử dụng, nó yêu cầu (từ vùng chứa):

  • Truy cập hiệu quả mục tại một chỉ mục nhất định: truy cập ngẫu nhiên
  • Khả năng hoán đổi hai mục: không liên kết

Do đó, bất kỳ vùng chứa nào cung cấp quyền truy cập ngẫu nhiên và không liên kết (về lý thuyết) đều phù hợp để sắp xếp hiệu quả theo (ví dụ) thuật toán sắp xếp nhanh.

Những vùng chứa nào trong C++ có thể đáp ứng yêu cầu này?

  • Mảng C cơ bản
  • Vì vậy
  • vector

Nếu bạn chú ý đến những chi tiết này,BạnBất kỳ vùng chứa nào có thể được viết.

Viết lại (sao chép/dán/điều chỉnh) cho mỗiloạiLiệu nó có lãng phí không?

Lưu ý rằng, ví dụ, có một std::list::sort phương pháp. Tại sao? bởi vì std::list Không cung cấp quyền truy cập ngẫu nhiên (không chính thức Danh sách của tôi[4] không hoạt động), vì vậy loại từ thuật toán là không phù hợp.

Về c++ - C++ hiệu quả Mục 23 Thích các hàm không phải thành viên không phải là bạn hơn các hàm thành viên, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/5989734/

32 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress