2010-04-29 15 views
6

Giả sử tôi có một lớp một:C++ OOP: Những chức năng nào để đưa vào lớp học?

class a 
{ 
public: 
    void load_data(); 
private: 
    void check_data(); 
    void work_data(); 
    void analyze_data(); 
} 

Những chức năng tất cả làm điều gì đó với lớp hoặc một trong các thành viên của nó.

Tuy nhiên chức năng này:

bool validate_something(myType myData) 
{ 
    if (myData.blah > 0 && myData.blah < 100) 
    { 
     return true; 
    } 
    return false; 
} 
  • là liên quan đến lớp học và sẽ chỉ được gọi bằng nó, vì vậy nó sẽ không cần thiết bất cứ nơi nào khác

  • Không làm gì cả với lớp học hoặc thành viên của nhóm - chỉ cần một chức năng "tiện ích" nhỏ

Nơi đặt validate_something? Bên trong hay bên ngoài lớp học?

+0

bạn có thể biến nó thành thành viên tĩnh – Tim

Trả lời

4

Làm cho nó một tin tĩnh thành viên lớp. Tôi thường có xu hướng làm cho các thành viên không hạng nhất và đặt chúng trong một không gian tên vô danh trong các tập tin thực hiện, nhưng có vẻ như họ hầu như luôn luôn làm kết thúc cần phải là thành viên lớp (hoặc cần phải được di chuyển nơi khác - có lẽ để một xác nhận thư viện, trong ví dụ của bạn), khi mã thay đổi, vì vậy bây giờ tôi hầu như luôn luôn làm cho họ thành viên tĩnh.

Xin lưu ý việc sử dụng "gần như" như một vòng khắp câu trả lời này :-)

+1

Tại sao hàm * cần * là thành viên tĩnh thay vì ở trong không gian tên không tên trong tệp impl? Hay bạn chỉ cần làm điều này để tiết kiệm công việc khi nó cần để có được dữ liệu nhà nước? –

+0

Và tại sao bạn làm cho chúng thành các thành viên 'tĩnh' hơn là các hàm thành viên? –

+0

@John Đó là kinh nghiệm của tôi rằng các hàm trợ giúp trong tệp triển khai hầu như luôn luôn cần phải được di chuyển đến lớp. Đây là sự tinh tế. –

0

Nếu phương pháp này là một tiện ích đó là chỉ được sử dụng bởi các lớp, tôi sẽ làm cho nó một phương pháp riêng của lớp. Bằng cách này, nó được đóng gói và không "gây ô nhiễm" API công cộng của bạn.

0

Giả sử rằng myType cũng là một struct/lớp, tại sao bạn không làm cho validate_something một phương pháp myType?

0

Theo tôi được biết, nó không phải là một phương pháp. Chỉ cần đặt định nghĩa của nó trong tệp cpp, phía trên định nghĩa của các phương thức sử dụng nó. Nếu Bạn có tất cả các định nghĩa phương pháp của bạn inline trong lớp học của bạn Bạn có phải đặt nguyên mẫu của hàm trong tiêu đề ở trên định nghĩa lớp, nhưng định nghĩa vẫn có thể được trong một file cpp.

10

Nếu một hàm là

  • không cần thiết bên ngoài của lớp, và,
  • không cần phải truy cập vào các thành viên lớp (hoặc có lẽ có ý nghĩa như một chức năng miễn phí với các thành viên như các thông số)

sau đó tôi có xu hướng để làm cho nó một chức năng miễn phí bên trong một không gian tên riêng trong file thực thi. Tôi không thích sử dụng các hàm riêng vì chúng lộ chi tiết thực hiện trong tệp tiêu đề (và chưa gặp phải các vấn đề của Neil) và tôi muốn tránh biên dịch lại để thực hiện các thay đổi.

Các vấn đề liên quan