2009-08-26 33 views
5

Đó là thích hợp:định loạt các phương pháp tĩnh trong C++

class xyz { 
    static int xyzOp1() { } 
    static int xyzOp2() { } 
}; 

HOẶC

namespace xyz { 
    static int xyzOp1() {} 
    static int xyzOp2() {} 
}; 

Có một cái gì đó cụ thể mà chúng ta có thể nhận được khi chúng ta định nghĩa sử dụng thẻ lớp so với thẻ namespace?

Cũng có bất kỳ sự khác biệt nào trong quản lý bộ nhớ, mà chúng ta cần phải lo lắng?

Trả lời

5

Nếu không nhìn thấy phần thân của các hàm này, tôi sẽ nói rằng không gian tên phù hợp hơn. Với các không gian tên, bạn có thể có các câu lệnh using, để bạn không phải đủ điều kiện các tên hàm khi gọi chúng.

Trường hợp duy nhất để sử dụng lớp học là khi các phương pháp tĩnh có bất kỳ mối quan hệ nào với các đối tượng của lớp, ví dụ: khi họ cần truy cập các thành viên cá nhân của các cá thể. Từ mô tả của bạn, có vẻ như bạn sẽ không tạo bất kỳ trường hợp nào của xyz, vì vậy bạn không nên sử dụng các lớp ở đây.

Từ quan điểm quản lý bộ nhớ, không có sự khác biệt giữa các cách tiếp cận này.

+0

Cảm ơn, tôi đang viết một số thói quen helper để lấy thông tin hệ thống từ phân tích cú pháp/proc fs, những thói quen helper không thực sự đòi hỏi một hiệp hội với lớp, trong yêu cầu của tôi nó làm cho cảm giác sử dụng không gian tên. Mọi thứ có thể đã thay đổi nếu tôi muốn ẩn vài trong số các thói quen trợ giúp này, mà các trình trợ giúp khác gọi nhưng không được tiếp xúc, trong trường hợp đó tôi có thể có cách tiếp cận lớp ưu tiên. – harishvk27

8

Chúng có nghĩa là những thứ khác nhau. Trong ngữ cảnh class, static có nghĩa là các phương pháp không yêu cầu đối tượng phải hành động, vì vậy, giống như các chức năng miễn phí hơn. Trong một bối cảnh namespace, nó có nghĩa là các chức năng có liên kết nội bộ như vậy là duy nhất cho các đơn vị dịch thuật mà chúng được định nghĩa trong.

Bên cạnh đó, các thành viên của một class là tin theo mặc định như vậy, như viết, chức năng lớp học của bạn chỉ có thể gọi được từ nhau. Bạn cần phải thêm thông số truy cập public: hoặc tạo class a struct để thay đổi điều này.

Nếu bạn cần một loạt các chức năng miễn phí và không cần đối tượng lớp thì có thể phù hợp hơn để xác định chúng là các hàm không phải là static trong không gian tên. Nếu chúng được xác định trong dòng trong tệp tiêu đề, thì chúng thường cần được khai báo inline. Điều này được ngụ ý nếu chúng được xác định trong một class.

1

Yếu tố chính trong việc chọn phương pháp sử dụng sẽ là các chức năng của bạn có thể hoạt động ở trạng thái riêng tư hoặc sử dụng các phương thức riêng tư, trong trường hợp đó, lớp tĩnh chắc chắn là lựa chọn tốt hơn.

Có một vài sắc thái khác, nhưng cuối cùng một lớp tĩnh sẽ đủ khả năng bạn kiểm soát nhiều hơn trong đóng gói của bạn.

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