C++ 类定义与成员变量初始化
79 浏览量
更新于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
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析