博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C++编程风格(修订版)》——2.2 明确定义的状态
阅读量:6761 次
发布时间:2019-06-26

本文共 896 字,大约阅读时间需要 2 分钟。

本节书摘来自异步社区出版社《C++编程风格(修订版)》一书中的第2章,第2.2节,作者:【美】Tom Cargill,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 明确定义的状态

C++编程风格(修订版)

在 string 类的前两个构造函数中存在着同样的问题。
image

如果在创建 string 对象时调用了上述两个构造函数之一,那么这个 string 对象的初始状态将 是未定义的。在下面的代码中将输出两个字符串,其中在创建 string 对象时分别调用了上面两个 构造函数。

image

对 x 和 y 来说,调用函数 print() 的结果是未定义的,因为由 x.s 和 y.s 指向的字符数组中的 内容是未定义的。在这两个构造函数中,都为字符数组分配了内存,但却没有对分配的内存进行 初始化。流输出对象 cout 将持续输出字符,直到在内存中遇到第一个空字符( 0 )才停止输出。

构造函数的目的是为了初始化对象,因此一个构造函数至少应该使对象处于明确定义的状态。

构造函数应该使得对象处于明确定义的状态。

在 string 类的前两个构造函数中,对初始状态的稳妥处理就是使用空字符串,即 s[0] 应该被 设置为空。

对于这两个构造函数,我们还可以作一个改进,不过这个改进略显次要。这两个构造函数 的功能几乎是等价的:在每个构造函数中都分配了一个字符数组,并将指向数组内存的指针保存在 s 中,以及将数组的长度保存在 len 中。二者唯一的区别就是其中一个构造函数使用了默认值 来指定数组的大小,而另一个构造函数则使用参数值来指定数组的大小。除此之外,这两个函数 都是相同的。因此,我们可以有更好的选择,即使用带有默认参数值的构造函数。通过用下面的 构造函数来代替前面两个构造函数,就可以改正到目前为止所遇到的两个问题:

image

通常来说,用默认参数的形式来代替函数重载的形式,可以使程序更加易于维护,因为此 时程序中将只会存在一个函数体。在本示例程序中,我们对构造函数采用了函数重载的形式。对 于其他的成员函数或者非成员函数,这个规则同样适用。

考虑使用默认参数的形式来代替函数重载的形式。

转载地址:http://cadeo.baihongyu.com/

你可能感兴趣的文章
VB 设置循环,以及弹出messageBox
查看>>
经典算法-链表(golang)
查看>>
leetcode — search-a-2d-matrix
查看>>
魔板 bfs() 预处理,记录每种状态。然后状态置换,(重点要用到全排列的hash记录状态)...
查看>>
构建之法课后作业第一次作业(15个题选一个)
查看>>
操作redis方法
查看>>
C语言函数
查看>>
Python3-异常处理
查看>>
Python-简单打印进度条
查看>>
【02】天气查询应用(第二课)
查看>>
监听微信返回按钮
查看>>
第二次实验报告
查看>>
HDU ACM 3790 最短路径问题
查看>>
python生成器
查看>>
linux 安装 ftp
查看>>
python 监控FTP目录下的文件个数
查看>>
MapInfo格式转arggis格式
查看>>
Network - SSL/TLS的基本概念
查看>>
python学习之老男孩python全栈第九期_day012知识点总结
查看>>
Shell if else
查看>>