您的位置:首页 > 娱乐 > 明星 > 盐城做网站网络公司电话?_河南真正免费建站_今日最新新闻重大事件_seo排名赚app最新版本

盐城做网站网络公司电话?_河南真正免费建站_今日最新新闻重大事件_seo排名赚app最新版本

2025/3/11 8:05:11 来源:https://blog.csdn.net/robert_chen1988/article/details/145956503  浏览:    关键词:盐城做网站网络公司电话?_河南真正免费建站_今日最新新闻重大事件_seo排名赚app最新版本
盐城做网站网络公司电话?_河南真正免费建站_今日最新新闻重大事件_seo排名赚app最新版本

在 C++ 中,structclassnamespace 经常看到,都是 用于组织代码的不同方式,但它们的作用、访问权限和适用场景各不相同。借助 AI 总结了这篇博客。

Java 与 Python 中,没有看到 struct 与 namespace 的类似类型。

文章目录

    • **1. 概述**
    • **2. `struct`、`class` 和 `namespace` 的区别**
      • **🔹 `struct`(结构体)**
      • **🔹 `class`(类)**
      • **🔹 `namespace`(命名空间)**
    • **3. `struct` vs `class`(深度对比)**
      • **🔹 继承示例**
    • **4. `namespace` vs `class`**
      • **🔹 `namespace` vs `class` 示例**
    • **5. 什么时候使用 `struct`、`class`、`namespace`?**
    • **6. 总结**

下面这个表格总结地非常清晰。


1. 概述

特性struct(结构体)class(类)namespace(命名空间)
作用组合多个数据成员组合数据和函数避免命名冲突
默认访问权限publicprivate
支持成员函数✅ 是✅ 是❌ 否
支持继承✅ 是✅ 是❌ 否
支持构造函数/析构函数✅ 是✅ 是❌ 否
对象实例化✅ 可以创建对象✅ 可以创建对象❌ 不能实例化
作用域控制❌ 否❌ 否✅ 可限定作用域
典型用途纯数据结构面向对象编程(OOP)组织全局函数和变量

2. structclassnamespace 的区别

🔹 struct(结构体)

作用:用于存储多个相关变量,类似于 C 语言的 struct,但 C++ 允许成员函数、构造函数、继承等特性。

#include <iostream>
using namespace std;struct Person {string name;int age;// 构造函数Person(string n, int a) : name(n), age(a) {}// 成员函数void display() {cout << "Name: " << name << ", Age: " << age << endl;}
};int main() {Person p1("Alice", 25);p1.display(); // Name: Alice, Age: 25return 0;
}

特点

  • ✅ 默认 public,数据可直接访问。
  • ✅ 适用于 简单的数据封装
  • 支持继承,但通常不用于面向对象编程(OOP)。

🔹 class(类)

作用:用于 面向对象编程(OOP),默认 private,强调 封装、继承、多态

#include <iostream>
using namespace std;class Person {
private:string name;int age;public:// 构造函数Person(string n, int a) : name(n), age(a) {}// 成员函数void display() {cout << "Name: " << name << ", Age: " << age << endl;}
};int main() {Person p1("Bob", 30);// p1.name = "Charlie"; // ❌ 错误,name 是 privatep1.display(); // Name: Bob, Age: 30return 0;
}

特点

  • 默认 private,强调数据封装。
  • ✅ 适用于 OOP(封装、继承、多态)
  • ✅ 需要 getter/setter 访问数据。

🔹 namespace(命名空间)

作用:用于 组织全局变量、函数、类等,避免命名冲突

#include <iostream>
namespace Math {const double PI = 3.1415926;double square(double x) {return x * x;}
}int main() {std::cout << "PI = " << Math::PI << std::endl;std::cout << "Square of 5 = " << Math::square(5) << std::endl;return 0;
}

特点

  • 不能创建对象(仅用于组织代码)。
  • ✅ 适用于 全局变量、函数、类的分类管理
  • ✅ 可以 嵌套匿名命名空间

3. struct vs class(深度对比)

对比点struct(结构体)class(类)
默认访问权限publicprivate
数据封装❌ 访问权限开放✅ 需要 public 访问函数
适用场景主要用于数据结构主要用于 OOP
继承方式默认 public 继承默认 private 继承

🔹 继承示例

struct BaseStruct {int x;
};struct DerivedStruct : BaseStruct { // 默认 public 继承void show() { cout << x << endl; } // ✅ x 是 public
};class BaseClass {int y;
};class DerivedClass : BaseClass { // 默认 private 继承// ❌ y 不能访问
};

📌 默认继承方式不同

  • struct 默认 public 继承,子类可以直接访问父类成员。
  • class 默认 private 继承,子类无法直接访问父类成员。

4. namespace vs class

对比点namespace(命名空间)class(类)
是否可实例化❌ 不能创建对象✅ 可以创建对象
数据成员✅ 可以有全局变量✅ 成员变量受访问控制
成员函数✅ 可定义函数✅ 可定义成员函数
访问控制❌ 无访问控制private / public
适用场景组织全局变量和函数OOP

🔹 namespace vs class 示例

namespace Math {double add(double a, double b) { return a + b; }
}class Calculator {
public:double add(double a, double b) { return a + b; }
};

📌 区别

  • namespace 不能实例化,只能用 Math::add() 访问。
  • class 需要创建对象才能使用,必须 Calculator c; c.add()

5. 什么时候使用 structclassnamespace

需求选择说明
仅存储数据struct没有访问控制要求,简单数据封装
面向对象编程(OOP)class需要封装、继承、多态
组织全局变量/函数namespace避免命名冲突

如果只是存储数据(如 PointPerson),struct
如果需要封装、继承、OOPclass
如果要组织全局函数/变量,避免冲突namespace


6. 总结

特性structclassnamespace
默认权限publicprivate
是否能实例化✅ 可以✅ 可以❌ 不能
支持成员函数✅ 是✅ 是❌ 否
支持继承✅ 是✅ 是❌ 否
适用于仅存储数据OOP 编程避免命名冲突

🚀 推荐使用规则

  • 数据存储用 struct(如 PointStudent)。
  • OOP 用 class(如 PersonCar)。
  • 全局组织用 namespace(如 MathUtils)。

这样,你就能正确选择 structclassnamespace 了 🎯🚀!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com