C++ 类定义与成员变量初始化
62 浏览量
更新于2024-08-28
收藏 42KB PDF 举报
"C++编程,讨论类的成员变量与指针的关系,以及默认构造、拷贝构造和拷贝赋值的行为。"
在C++中,定义一个类时,如果类的成员变量没有指针,那么这个类将遵循C++的默认规则来处理构造、拷贝构造和拷贝赋值。在提供的代码片段中,`DsSize` 结构体就是一个简单的例子。由于没有定义任何构造函数、析构函数、拷贝构造函数或拷贝赋值运算符,编译器会自动生成默认的实现。
代码01展示了`DsSize`结构体的默认行为。当创建`s1`、`s2`和`s3`对象时,它们分别调用了默认构造函数。每个对象都有独立的内存空间,因此它们的地址不同,证明它们是三个不同的对象。这符合C++中对象的常规行为,每个对象都有自己的数据成员副本。
代码02中,`DsSize`结构体添加了两个成员变量`width`和`height`。在`testDsSize1`函数中,直接创建`s1`对象后,尝试使用`s1`调用拷贝构造函数创建`s2`会导致编译错误,因为`s1`的成员变量尚未初始化。而在`testDsSize2`中,先为`s1`的成员变量赋值,然后使用`s1`创建`s2`,此时编译通过。这说明拷贝构造函数会复制源对象的所有成员,包括已经赋值的成员变量。
代码03中,`DsSize`结构体的成员变量`width`和`height`被赋予了默认值1,这样即使没有显式初始化,成员变量也有初始值,避免了未初始化的问题。在`testDsSize1`函数中,可以看到`s1`和`s2`的地址仍然不同,表明它们仍然是独立的对象。
总结来说,C++中的类如果没有指针成员,其对象会根据默认规则进行构造、拷贝构造和拷贝赋值。成员变量如果没有显式初始化,编译器不会自动为其分配默认值,可能导致未初始化的使用问题。为了避免这种问题,可以为类的成员变量提供默认值,或者在构造函数中进行初始化。同时,对于包含指针的类,需要特别注意内存管理,避免出现悬挂指针或内存泄漏。
140 浏览量
2022-08-03 上传
2023-11-29 上传
2023-06-07 上传
2024-04-07 上传
2023-05-31 上传
2023-06-07 上传
2023-06-12 上传
weixin_38624437
- 粉丝: 4
- 资源: 925
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器