莆田市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜 - 苏木2025
2026/1/19 12:01:32
可以先记住一个核心结论:
下面用表格清晰对比两者的关键差异:
| 特性 | 命名空间 (namespace) | 类 (class) |
|---|---|---|
| 核心目的 | 分组代码、避免命名冲突 | 封装数据和方法、实现继承 / 多态等 OOP 特性 |
| 实例化 | 无需实例化,直接通过::访问成员 | 必须实例化(除非成员是 static)才能访问非静态成员 |
| 访问控制 | 无访问权限(public/private/protected) | 有严格的访问控制,默认 private |
| 继承 / 多态 | 不支持继承、多态 | 支持继承、多态(虚函数) |
| 内存占用 | 仅逻辑分组,不占用内存 | 实例化后占用内存(存储成员变量) |
| 可拆分定义 | 可在多个文件中拆分定义同一个命名空间 | 类的定义通常需放在头文件,实现放源文件 |
| 匿名形式 | 支持匿名命名空间(仅当前文件可见) | 无匿名类(C++11 有局部类,但用法不同) |
| 典型使用场景 | 划分模块(如std、MyProject::Network) | 定义数据类型(如std::string、自定义Person类) |
cpp
运行
#include <iostream> // 命名空间:纯分组,无访问控制 namespace MathTools { // 所有成员默认“公开”,可直接访问 int add(int a, int b) { return a + b; } int mul(int a, int b) { return a * b; } } int main() { // 直接访问,无需实例化 std::cout << MathTools::add(2, 3) << std::endl; // 输出5 return 0; }cpp
运行
#include <iostream> // 类:封装+访问控制,面向对象核心 class MathCalculator { private: // 私有成员,外部无法直接访问 int result; // 存储计算结果,占用内存 public: // 公有方法,提供对外接口 void add(int a, int b) { result = a + b; } void mul(int a, int b) { result = a * b; } int getResult() { return result; } }; int main() { // 必须实例化(创建对象)才能使用非静态成员 MathCalculator calc; // 实例化,占用内存 calc.add(2, 3); std::cout << calc.getResult() << std::endl; // 输出5 // calc.result = 10; // 错误:private成员无法直接访问 return 0; }static成员无需实例化即可访问(如MathCalculator::version),看似和命名空间成员相似,但static成员仍属于类的范畴,受访问控制约束,而命名空间成员无此限制。UI、Data);