C++类详解:构造与析构、成员函数与封装
需积分: 11 192 浏览量
更新于2024-09-10
收藏 5KB TXT 举报
"C++类的总结"
在C++编程语言中,类是核心特性之一,它为对象导向编程(OOP)提供了基础。C++是在C语言的基础上扩展的,引入了类、继承、多态等面向对象的概念,使得程序设计更加灵活和结构化。
1. **C++ 类的定义与作用**
- C++类是一种数据结构,用于封装数据(成员变量)和操作这些数据的方法(成员函数)。类是创建对象的蓝图,它定义了一组特性和行为。
- 在类中,数据成员(变量)可以声明为`public`、`protected`或`private`,以控制对它们的访问权限。`public`成员可以从任何地方访问,`protected`成员仅限于类自身和其派生类,而`private`成员只能在类内部访问。
2. **构造函数与析构函数**
- 构造函数(如`Person()`)是类的一个特殊方法,用于初始化新创建的对象。当对象被创建时,构造函数自动调用,确保对象以正确的状态开始其生命周期。
- 析构函数(如`~Person()`)是另一个特殊成员函数,用于在对象生命周期结束时执行清理工作,例如释放动态分配的内存。
3. **成员函数与友元**
- 成员函数(如`void Run()`)是类的一部分,用于操作类的成员变量。`void Run()`在此例中定义了一个行为,表示人正在跑步。
- 友元(friend)是一个可以访问类的私有和保护成员的非成员函数或类。这里没有显示友元的使用,但在需要跨访问权限边界协作时,友元是必要的。
4. **指针与动态内存管理**
- 在示例中,`PERSON* NewPerson()`函数动态地分配了一个`PERSON`类型的对象,并返回指向它的指针。这是通过`malloc()`函数完成的,它从堆中分配内存。
- `PERSON* pObj = NULL;`声明一个指针并将其初始化为NULL,这是良好的编程实践,以避免未初始化的指针问题。
- `pObj->RunFun = Run;`展示了如何将函数指针赋值给类成员,使得对象能够通过成员函数指针调用外部定义的函数。
- `DeletePerson()`函数使用`free()`来释放由`NewPerson()`分配的内存,防止内存泄漏。
5. **typedef 和 结构体**
- `typedef`关键字用于为已存在的类型创建一个新的名称。在本例中,`typedef void(*pFun)() PFUN_RUN;`定义了一个新的类型`PFUN_RUN`,它是一个无参数无返回值的函数指针。
- `typedef struct_PERSON {...} PERSON;`创建了一个结构体类型`PERSON`,使得我们可以用更易读的`PERSON`代替`struct_PERSON`来声明变量。
6. **对象实例化与调用成员**
- `PERSON* pPersonObj = NewPerson(25, "xiaoming");`实例化了一个名为"xiaoming",年龄为25的新对象,并将其存储在指针`pPersonObj`中。
- `pPersonObj->RunFun();`通过成员函数指针调用`Run()`函数,实现了对对象行为的调用。
7. **面向对象特性**
- 隐藏实现细节(封装):通过访问修饰符控制成员的可见性。
- 继承(Inheritance):一个类可以从另一个类派生,继承其属性和行为。
- 多态(Polymorphism):不同对象可以响应相同的函数调用,但执行不同的操作。在本例中,虽然未直接展示,但可以通过虚函数和指针实现多态。
总结起来,C++类是构建复杂软件系统的基础,提供了数据抽象、封装、继承和多态等面向对象特性。理解和熟练使用类是成为C++程序员的关键。
234 浏览量
113 浏览量
141 浏览量
155 浏览量
2024-11-09 上传
2024-10-17 上传
永不降落
- 粉丝: 18
- 资源: 18
最新资源
- yolov3 yolov3-tiny yolov4 yolov-tiny预训练模型下载
- TCSC.zip_tcsc simulink_无功补偿_电力 补偿_电容器_电容器补偿
- fs-family:已弃用:显示一对夫妇,并可以选择加载和显示该夫妇的孩子
- github-upload
- Open-Myo:使用通用BLE接口从Myo臂章获取数据的Python模块
- D3-React-Patterns:各种技术和模式的集合,用于在较大的React框架内组织D3项目。 这将是任何人都可以参与的公开回购,更多细节可以在DVS松弛中找到。
- Yolov5-master.zip
- RoboSpice-samples:RoboSpice库的所有样本
- ExtremeSpaceCombat:带有太空飞船的Java游戏
- 学生管理系统源码.zip
- FurniTale::no_entry:种族关系进展
- 捷德
- Trapped
- 高斯白噪声matlab代码-PE-GAMP:带有内置参数估计的通用近似图像消息传递
- 安卓Android活动社交仿QQ聊天app设计
- sdnotify-proxy:在不同cgroup中的systemd和进程之间代理sd_notify消息