C++中的结构体与类:从结构体到类的转变

需积分: 1 0 下载量 127 浏览量 更新于2024-09-09 收藏 45KB DOCX 举报
"结构体与类的对比和使用" 在编程领域,结构体和类是两种用于组织数据的重要概念,它们在C++中扮演着关键角色。结构体(Struct)起源于C语言,而类(Class)则是C++引入的面向对象编程的关键元素。虽然两者在某些方面相似,但它们之间存在显著的差异。 首先,结构体允许我们将多个相关的变量打包在一起,形成一个复合数据类型。在上面的例子中,`struct point` 定义了一个包含两个整型成员 `x` 和 `y` 的结构体,用于表示二维坐标。在C语言中,结构体的成员默认是公有的,可以直接访问。例如,我们可以创建一个名为 `pt` 的 `point` 结构体实例,并直接赋值 `pt.x = 0;` 和 `pt.y = 1;`。 然而,C语言中的结构体不支持方法(成员函数),这意味着它们不能直接描述对象的行为。在C++中,结构体得到了扩展,可以包含函数,如上述示例中的 `void output()` 函数,它用于打印结构体的 `x` 和 `y` 值。 当我们将 `struct` 改为 `class`,结构体就变成了类。类在C++中提供了封装、继承和多态等面向对象特性。类的成员默认是私有的(private),这意味着在类外部不能直接访问它们,除非声明为公有(public)或受保护(protected)。因此,上述示例中的 `class point` 的 `x` 和 `y` 成员是私有的,导致在 `main()` 函数中直接访问它们时编译失败。 为了能够访问类的私有成员,我们需要提供公共的访问器(getter)和修改器(setter)函数,或者直接将成员声明为公有。在面向对象编程中,这种做法有助于保护数据的安全性。例如: ```cpp class Point { public: int x; int y; void output() { cout << x << endl << y << endl; } }; int main() { Point pt; pt.output(); // 可以直接调用公有成员函数 } ``` 在这个修正后的例子中,`Point` 类的 `x` 和 `y` 成员被声明为公有,因此可以直接在 `main()` 函数中访问。然而,通常推荐保持数据私有并使用公有接口来操作数据,以遵循良好的面向对象编程实践。 总结来说,结构体和类的主要区别在于,结构体更注重数据的组合,而类则提供了封装数据和行为的能力,是面向对象编程的基础。在实际编程中,根据需求选择使用结构体还是类,可以更好地组织代码,提高代码的可读性和可维护性。