
C++ 类定义与成员变量初始化
42KB |
更新于2024-08-28
| 185 浏览量 | 举报
收藏
"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++中的类如果没有指针成员,其对象会根据默认规则进行构造、拷贝构造和拷贝赋值。成员变量如果没有显式初始化,编译器不会自动为其分配默认值,可能导致未初始化的使用问题。为了避免这种问题,可以为类的成员变量提供默认值,或者在构造函数中进行初始化。同时,对于包含指针的类,需要特别注意内存管理,避免出现悬挂指针或内存泄漏。
相关推荐









weixin_38624437
- 粉丝: 4
最新资源
- DataGridView控件中实现Combo与数据库字段绑定教程
- 车辆信息管理系统开发课件详解
- Java程序设计源码包:学习JAVA语言的必备资源
- Delphi与SQL2000客房管理系统的设计与实践
- 虚拟光驱免安装版:简化游戏安装体验
- UniDAC 1.2:跨数据库应用程序的快速开发解决方案
- VC编程实践教程:第3章让我动吧源程序解析
- 数字图书管理系统全面文档设计方案
- 全面解析ARM处理器技术及应用手册
- SSDTView恢复功能揭秘:VB编写的强大程序
- JSF框架原理与实践代码演示
- VB实现XP风格菜单的制作教程
- JSValidation前端验证工具包深度解析
- 数字图像真彩色增强系统实现及应用
- com0com虚拟串口工具在Windows系统中的应用与安装
- Hibernate开发指南与配置快速入门
- C语言注释删除工具:操作、脚本与实例
- Displaytag-1.1.1版本发布及压缩包介绍
- 打造IBM Portal JSR168标准Portlet的投票调查应用
- XP虚拟光驱安装指南:快速装载ISO/IMG镜像文件
- EVC在WINCE平台操作INI文件的源代码解析
- Struts_x文档与代码测试实战指南
- VB工资管理系统全源码分享及学习指南
- C#编程实例: 操作注册表、WMI硬件信息读取与Excel操作