• c++&qt day3


    头文件

    1. #ifndef MYSTRING_H
    2. #define MYSTRING_H
    3. #include
    4. #include
    5. using namespace std;
    6. class myString
    7. {
    8. private:
    9. char* str;
    10. int size;
    11. public:
    12. //无参构造
    13. myString();
    14. //有参构造
    15. myString(const char* s);
    16. //拷贝构造
    17. myString(const myString& other);
    18. //析构函数
    19. ~myString();
    20. //拷贝赋值函数
    21. myString& operator=(const myString& other);
    22. //判空
    23. bool empty()const;
    24. //size函数
    25. int getSize()const;
    26. //c_str函数
    27. const char* c_str()const;
    28. //at函数
    29. char &at(int pos);
    30. //加号运算符重载
    31. myString operator+(const myString& other)const;
    32. //加等于运算符重载
    33. myString& operator+=(const myString& other);
    34. //关系运算符>重载
    35. bool operator>(const myString& other)const;
    36. //中括号运算符重载
    37. char& operator[](int pos);
    38. };
    39. #endif // MYSTRING_H

    功能文件

    1. #include "head.h"
    2. //无参构造
    3. myString::myString() :size(10)
    4. {
    5. str = new char[10];
    6. strcpy(str, "");
    7. }
    8. //有参构造
    9. myString::myString(const char* s)
    10. {
    11. size = strlen(s);
    12. str = new char[size + 1];
    13. strcpy(str, s);
    14. }
    15. //拷贝构造
    16. myString::myString(const myString& other)
    17. {
    18. size = other.size;
    19. str = new char[size + 1];
    20. strcpy(str, other.str);
    21. }
    22. //析构函数
    23. myString::~myString()
    24. {
    25. delete[] str;
    26. }
    27. //拷贝赋值
    28. myString& myString::operator=(const myString& other)
    29. {
    30. if (this != &other)
    31. {
    32. delete[] str;
    33. size = other.size;
    34. str = new char[size + 1];
    35. strcpy(str, other.str);
    36. }
    37. return *this;
    38. }
    39. //判空
    40. bool myString::empty() const
    41. {
    42. return size==0;
    43. }
    44. //size函数
    45. int myString::getSize() const
    46. {
    47. return size;
    48. }
    49. //c_str函数
    50. const char* myString::c_str() const
    51. {
    52. return str;
    53. }
    54. //at函数
    55. char& myString::at(int pos)
    56. {
    57. if (pos >= 0 && pos < size)
    58. {
    59. return str[pos];
    60. }
    61. else
    62. {
    63. cout << "所给位置不合法" << endl;
    64. return str[0];
    65. }
    66. }
    67. //加号运算符重载
    68. myString myString::operator+(const myString& other) const
    69. {
    70. myString temp;
    71. temp.size = this->size + other.size;
    72. temp.str = new char[temp.size + 1];
    73. strcpy(temp.str, this->str);
    74. strcat(temp.str, other.str);
    75. return temp;
    76. }
    77. //加等于运算符重载
    78. myString& myString::operator+=(const myString& other)
    79. {
    80. char* temp = new char[size + other.size + 1];
    81. strcpy(temp, str);
    82. strcat(temp, str);
    83. delete[] str;
    84. str = temp;
    85. size += other.size;
    86. }
    87. //关系运算符>重载
    88. bool myString::operator>(const myString& other) const
    89. {
    90. return strcmp(str, other.str)>0;
    91. }
    92. //中括号运算符重载
    93. char& myString::operator[](int pos)
    94. {
    95. return at(pos);
    96. }

    测试文件

    1. #include "head.h"
    2. int main()
    3. {
    4. myString s1("Hello");
    5. myString s2("World");
    6. // 使用各种函数和运算符
    7. myString s3 = s1 + " " + s2;
    8. cout << s3.c_str() << endl;
    9. s1 += " C++";
    10. cout << s1.c_str() << endl;
    11. if (s1 > s2)
    12. {
    13. cout << s1.c_str() << " is greater than " << s2.c_str() << endl;
    14. return 0;
    15. }
    16. }

  • 相关阅读:
    ChatGPT 超有用提示词 练习雅思口语
    docker容器导出报错
    Unity-2D游戏-打击感与敌人AI
    快速找到需要包含函数的头文件
    【ELFK】之Filebeat
    AtCoder Beginner Contest 254「E bfs」「F st表维护差分数组gcd」
    Impala中replace和translate的用法和区别
    【Qt之QWizardPage】使用
    【树莓派】windows和树莓派之间文件共享(Samba)
    Rust 中文社区 2024 调查问卷
  • 原文地址:https://blog.csdn.net/weixin_65188498/article/details/132818280