C++面向对象:从struct到class的转换

需积分: 13 0 下载量 36 浏览量 更新于2024-07-14 收藏 1.13MB PPT 举报
"从struct到class的转换,C++中的类和对象的封装性,包括类的成员函数、构造函数、析构函数以及动态存储的介绍。" 在C++编程语言中,`struct`和`class`都是用来定义复合数据类型的关键词,但它们之间存在一些关键差异。通常,在C++中,`class`被更广泛地用于实现面向对象编程(OOP)的概念,而`struct`则更接近于C语言中的结构体。然而,两者的本质区别主要在于默认的成员访问权限:`struct`的成员默认是public,而`class`的成员默认是private。 面向对象编程的核心概念之一是封装,即隐藏数据的内部实现细节,只对外提供接口进行操作。`class`正好符合这一理念,通过设定私有(private)成员来保护数据,然后提供公有(public)的成员函数(方法)来访问和修改这些数据。 例如,我们有一个表示员工数据的结构体`empData`: ```cpp struct empData { char empCode[8]; float wkSalary; }; ``` 为了更好地实现封装,我们可以将其转换为类: ```cpp class EmpData { private: char empCode[8]; float wkSalary; public: // 添加构造函数、析构函数等成员函数 // ... }; ``` 成员函数是类的一部分,允许对类的成员进行操作。这里有几种类型的成员函数: 1. 构造函数:当对象创建时自动调用,用于初始化对象的状态。在上面的`EmpData`例子中,我们可以定义一个构造函数来设置员工代码和周薪。 2. 析构函数:对象生命周期结束时自动调用,用于清理对象可能占用的资源。对于没有动态分配内存的简单类,析构函数通常是空的。 3. 动态存储:在类中,如果需要动态分配内存,可以使用new运算符。例如,如果`EmpData`需要存储一系列的工作记录,可以使用动态数组或`std::vector`。 4. 友元函数和友元类:在某些情况下,我们需要让非成员函数或另一个类能够访问类的私有或保护成员,这时可以声明它们为友元。 在C++中,类是对象的蓝图,而对象是类的实例。例如,我们可以创建`EmpData`类的实例: ```cpp EmpData emp1, emp2; ``` 这里,`emp1`和`emp2`是`EmpData`类的对象,它们各自拥有自己的`empCode`和`wkSalary`。我们可以通过成员函数来操作这些对象的属性。 总结来说,从`struct`提升到`class`是迈向面向对象编程的重要步骤,它允许我们更好地实现数据封装,通过成员函数控制对数据的访问,以及利用构造函数和析构函数管理对象的生命周期。同时,了解动态存储、友元等概念有助于编写更加灵活和高效的C++代码。