Namespace và class là hai khái niệm khác nhau. Class là kiểu dữ liệu (mở rộng struct), chứa thành viên dữ liệu và hàm. Namespace gom nhóm biến/hàm để tránh xung đột tên, không thể khởi tạo đối tượng.
Các khác biệt quan trọng
- Namespace dùng để nhóm định danh tránh va chạm; class cần tạo instance, namespace thì không.
- Namespace dùng khai báo
using; class không (trừ khi kế thừa). - Namespace có thể mở lại bổ sung phần tử qua nhiều đơn vị dịch (translation units); class không thể.
- Namespace vô danh hợp lệ; class vô danh gây lỗi.
Ví dụ namespace có thể mở lại
namespace my_namespace { int function1(); }
namespace my_namespace { int function2(); } // Hợp lệ
Class không thể khai báo lại
class my_class { int function1(); };
class my_class { int function2(); }; // Lỗi
Namespace vô danh vs class vô danh
namespace { int function1(); } // Hợp lệ
class { int function1(); }; // Lỗi