C++面向对象:从struct到class的转换
需积分: 13 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++代码。
2008-09-24 上传
2010-09-25 上传
2023-08-30 上传
2020-12-31 上传
2021-07-14 上传
2020-12-22 上传
2008-06-30 上传
点击了解资源详情
2023-06-11 上传
雪蔻
- 粉丝: 30
- 资源: 2万+
最新资源
- ednsl:用于在 clojure 中使用 edn 语法创建 dsl 的 dsl
- threes:RT-Thread终端益智类游戏| 一个独立的益智视频游戏在RT-Thread控制台上运行
- weather-page-demo
- 电子商务客户端:电子商务客户端
- Sayhub-express:我的Express博客后端
- 310V单相高压无刷直流电机驱动方案——(高压风机、高压落地扇、中央空调盘管风机等单相无刷电机应用)-电路方案
- 这是一本 MySQL 学习笔记.zip
- gze1206.github.io
- android-mypapayoo:Android-在Android上实施纸牌游戏“ Papayoo”(离线,正在进行中)
- intercom:用于对讲的 Go 客户端库
- Silvaco-LearningNote:Silvaco学习笔记
- 贪食蛇VC++小游戏 附源码贪食蛇
- 这是一个基于Springboot+Mybatis+Redis+MySql+RabbitMq的校园医疗管理系统,本来是.zip
- bst_in_mips:用MIPS汇编语言实现一些二进制搜索树操作
- Mod-Menu-Template:Android的Mod菜单模板
- FED-lessen:投资组合网站为FED