赞
踩
为了更好的理解下面的重载实现,需要知道类成员函数的隐藏参数
string类比较常见的运算符重载:
(1) += :将新的字符串拼接在原来的末尾
(2) = :用一个字符串的内容去替换另一个字符串的内容
(3) > 或 <:比较字符串的大小
(4) [ ]:获取到指定位置上的字符
目录
我们使用string类的时候常常可以看到下面这种写法
- string s;
- s += "abc";
运算符 += 可以把一个字符串拼接到当前字符串的末尾
我们直接使用前面 实现了的 push_back 函数和 append函数string类的模拟实现(三)—— 插入字符/字符串_abs(ln(1+NaN))的博客-CSDN博客https://blog.csdn.net/challenglistic/article/details/123975756?spm=1001.2014.3001.5501
左操作数是隐藏的那个参数
- MyString& operator+=(char ch)
- {
- push_back(ch);
- return *this;
- }
代码测试:
- int main() {
- MyString s4("abcd");
- s4 += 'p'; //编译时会变成 s4.operator+=('p');
-
- return 0;
- }
- MyString& operator+=(const char* str)
- {
- append(str);
- return *this;
- }
s1 = s2;
假设现在有两个对象 s1 、s2
s1希望变得和 s2一样,不光是内容一样,空间大小也希望是一样的
(1) 判断是不是自己给自己赋值,即 s1 = s1
(2) 释放原本的空间
(3) 开辟一个和s2一样大的空间
(4) 把 s2 中的内容拷贝到 s1 中
- MyString& operator=(const MyString& s)
- {
- if (this != &s) //防止自己给自己赋值
- {
- delete[] _str; //释放原空间
- _str = new char[strlen(s._str) + 1]; //开辟新空间,不要忘了给\0留个位置
- strcpy(_str, s._str);
-
- _size = s._size;
- _capacity = s._capacity; //避免空间浪费
- }
-
- return *this;
- }
代码测试:
- int main() {
- MyString s1("hello,world");
- MyString s2("sort");
- s1 = s2;
-
- return 0;
- }
s1 > s2
两个字符串 逐字符比较,实际上比较的是ASCII码的大小
- bool operator>(MyString& s)
- {
- int cur1 = 0, cur2 = 0;
- while (cur1 < _size && cur2 < s._size)
- {
- if (_str[cur1++] > s._str[cur2++])
- {
- return true;
- }
- }
- if (cur1 < _size) //s1能继续比较,但s2不行,s1更大
- {
- return true;
- }
- if (cur2 < s._size)
- {
- return false;
- }
- return false; //s1 == s2
- }
代码测试:
- int main() {
- MyString s1("sort1");
- MyString s2("sort");
- cout << "比较结果为:" << (s1 > s2) << endl;
-
- return 0;
- }
在使用数组的时候,常常可以看到
s[1] = 'a';
这个运算符既可以获取指定下标的字符,还可以修改指定下标的字符(要求使用引用返回实现)
- char& operator[](int pos)
- {
- assert(pos >= 0 && pos < _size);
- return _str[pos];
- }
代码测试:
- int main() {
- MyString s1("sort");
- cout << "索引的结果是:" << s1[1] << endl;
-
- s1[0] = 'S';
- cout << "修改的结果是:";
- for (size_t i = 0; i < 4; i++)
- {
- cout << s1[i];
- }
- cout << endl;
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。