image.png

    1. #include <cstdlib>
    2. #include <iostream>
    3. #include <string>
    4. #include <algorithm>
    5. using namespace std;
    6. class MyString : public string
    7. {
    8. public:
    9. MyString() : string() {}
    10. MyString(const MyString &ms) : string(ms) {}
    11. MyString(const char *s) : string(s) {}
    12. MyString(const string &s) : string(s) {}
    13. MyString operator()(int start, int len) { return substr(start, len); }
    14. };
    15. int main()
    16. {
    17. MyString s1("abcd-"), s2, s3("efgh-"), s4(s1);
    18. MyString SArray[4] = {"big", "me", "about", "take"};
    19. cout << "1. " << s1 << s2 << s3 << s4 << endl;
    20. s4 = s3;
    21. s3 = s1 + s3;
    22. cout << "2. " << s1 << endl;
    23. cout << "3. " << s2 << endl;
    24. cout << "4. " << s3 << endl;
    25. cout << "5. " << s4 << endl;
    26. cout << "6. " << s1[2] << endl;
    27. s2 = s1;
    28. s1 = "ijkl-";
    29. s1[2] = 'A';
    30. cout << "7. " << s2 << endl;
    31. cout << "8. " << s1 << endl;
    32. s1 += "mnop";
    33. cout << "9. " << s1 << endl;
    34. s4 = "qrst-" + s2;
    35. cout << "10. " << s4 << endl;
    36. s1 = s2 + s4 + " uvw " + "xyz";
    37. cout << "11. " << s1 << endl;
    38. sort(SArray, SArray + 4);
    39. for (int i = 0; i < 4; i++)
    40. cout << SArray[i] << endl;
    41. //s1的从下标0开始长度为4的子串
    42. cout << s1(0, 4) << endl;
    43. //s1的从下标5开始长度为10的子串
    44. cout << s1(5, 10) << endl;
    45. return 0;
    46. }
    • 调用父类构造函数的写法
    • 不需要自己实现更多的运算符重载以及析构函数之类的,因为继承了父类所有的成员函数和成员变量,当调用这些重载过的运算符的时候,就直接使用父类继承下来的函数和变量。