重载()
前言
返回类型 operator()(类型 操作数);
看到这个圆括号或多或少可以猜到跟函数有关
()跟[]一样都只能重载为类的方法
- ()重载称为functor函数对象
- 不限制参数个数
- 可以做默认实参
利用()可以实现二维数组的访问方式
正文
1 | const char& operator()(); |
1 | const char &hstring::operator()(){ |
先随便玩一玩
看到当调用str()的时候不是出现其它函数,而是我们使用的重载,返回第一个元素
虽然有点抽象。
但是要实现个稍微有用点的功能就要构思一下,感觉截取会比较直接。
1 | hstring operator()(const unsigned short _index, const unsigned short _length); |
传递两个参数,一个起始位置,一个要截取的长度。
那么在设计的时候其实要考虑几个问题
- 字符串末尾0怎么处理
- 长度溢出是报错还是怎么处理
- 起始位置搞事情怎么办
1 | hstring hstring::operator()(const unsigned short _index, const unsigned short _length){ |
像这种起始位置超过长度,就直接返回个空的也不是不行。
然后对于字符串末尾的0,忽略也不是什么大事,后期加个回去就行,毕竟不是显现的因素。
然后就是构建这个截取的字符串
1 | unsigned short len = (_index + _length) > (hsLen - 1) ? hsLen - _index - 1 : _length; |
如果起始+截取长度超过字符串长度,就让len = 字符串长度-起始值-1,比如起始值1,截取15,字符串长度5,那么明显是超过了,利用我们的公式,len = 5-1-1。 == 3,也就是从1开始往后截取3位。
重新new的内存就要3+1,因为最后一个需要我们重置\0
拷贝函数就用现有的了。
1 | hstring hstring::operator()(const unsigned short _index, const unsigned short _length){ |
大致上应该就是这样。
结语
优化空间也有,内存方面或许可以考虑别的方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Box'Blog!
评论