之前写过,(8条消息) 模拟实现C++的string库_Qianxueban的博客-CSDN博客
比较简单,我就直接截图的。我要改进一下。
1.改进string类中可以在字符串中存储\0
但我写的没有这项功能,究其根本就是代码我用的都是strcpy等等函数,应该用memcpy等等函数,他就不是受\0的制约了。
2.流插入和流提取,可以不需要用友元,以及流提取的一些小细节
1.写流提取的话,很多的第个思路就是下面这个,一个个读;
但是,你会发现你无法结束这个函数,主要原因就是:cin无法读取空格和换行符。
回想一下,我们之前再传入多个数时,都是以空格或者换行来区分的,这就说明了cin是无法读取空格和换行符的。
所以就要用到istream中有一个成员函数get()可以读取这一功能的。
就可以初步的实现这个功能了,当然肯定还是要有一些细节来处理的:
所以我们要清空一下s这个string。
还有一个很细节的注意事项,所以我们会发现写代码写出bug很正常,因为我们不可以考虑到所有的情况。
最后一点,因为我们是一个个加到,如果一次性要输入很出了字符,就要不断地扩容,可以看一下:(看结果就好了,代码我做了点修改,让他扩容的时候展现出来了)
所以我们可以用一个数组来存储,最后一次性加上去:
3.resize的实现
4.深浅拷贝
如果我们不写operator=运算符重载的成员函数,那么系统就会默认复制函数,但是这是浅拷贝
上面这个程序就会报错:为什么呢?这就要考虑到系统给我们的默认赋值函数仅仅是简单的拷贝:
这个是最简单想到的程序,接下来就是改进他。
最现代写法就是,让系统帮我们调用拷贝构造函数;
5.运算符重载比较