Không có thứ như "lớp tĩnh" trong C++, do đó, từ điểm C++, bạn không sử dụng nó "làm lớp tĩnh", bạn đang sử dụng nó "làm không gian tên". Nó chắc chắn chấp nhận thực hành để sử dụng không gian tên để nhóm chức năng với nhau.
Tùy thuộc vào bạn, bạn muốn các nhóm như thế nào. Nó không phải bất thường đối với các thư viện C++ để sử dụng một không gian tên duy nhất cho toàn bộ giao diện công cộng. Điều đó có thể gây ngạc nhiên cho một người quen với Java (nói), nơi các lớp thường được sử dụng để nhóm các số phương pháp tĩnh lại với nhau. Vì C++ đã ở đây đầu tiên, bạn có thể nói rằng Java đang sử dụng các lớp như các không gian tên.
Vì vậy, trong C++ bạn không có xu hướng xem các lớp tương tự như java.util.Collections
hoặc java.lang.Math
, đầy đủ các thành viên tĩnh. Nếu bạn muốn các nhóm hàm giống như vậy trong C++, hãy sử dụng các không gian tên.
Trường hợp ngoại lệ (không phải lúc nào cũng có trường hợp đặc biệt trong C++?) Là các kiểu đặc điểm như std::numeric_limits<T>
, trong đó tham số mẫu làm cho lớp làm điều gì đó mà không gian tên không thể thực hiện. Bạn có thể xác định không gian tên numeric_limits
chứa các mẫu chức năng max<T>()
, min<T>()
v.v. nhưng không tốt. Thứ nhất, nó nhóm các thứ hơi khác nhau, loại T
xuất hiện "hạ thấp phân cấp". Thứ hai, nó không làm mọi thứ mà một kiểu đặc điểm, bởi vì không có thứ gì như một "mẫu đối tượng" cho phép bạn định nghĩa một giá trị numeric_limits::digits<T>
.
Tôi không biết C# cũng đủ để nhận xét về cách sử dụng thực tế của các lớp tĩnh ở đó, nhưng AFAIK nó chỉ là một lớp hạn chế không có thành viên không tĩnh, vì vậy nó tương tự như các lớp Java.
Nguồn
2013-01-16 15:11:59
tôi thích "extern" bởi vì chỉ có C + + có thể làm điều đó trong OOP;) Cũng cho C hoặc Objective C tương thích. – 9dan
* "Thực hành tốt hay không tốt để sử dụng không gian tên như một lớp tĩnh" * - Thực ra nó là thực hành tốt hơn nhiều so với tùy chọn thứ hai của bạn. Cái sau chỉ được ưa thích (hay đúng hơn là cần thiết) nếu bạn cần một không gian tên mẫu * "*" hoặc muốn tạo một không gian tên toàn bộ một người bạn của một lớp khác (mặc dù điều đó cũng có thể nghi ngờ). –