• C++ day4


    1、仿照string类,完成myString 类

    1. #include
    2. #include
    3. using namespace std;
    4. class myString
    5. {
    6. private:
    7. char *str; //记录c风格的字符串
    8. int size; //记录字符串的实际长度
    9. public:
    10. //无参构造
    11. myString():size(10)
    12. {
    13. str = new char[size]; //构造出一个长度为10的字符串
    14. strcpy(str,""); //赋值为空串
    15. }
    16. //有参构造
    17. myString(const char *s) //string s("hello world")
    18. {
    19. size = strlen(s);
    20. str = new char[size+1];
    21. strcpy(str, s);
    22. }
    23. //拷贝构造
    24. myString(const myString &other):str(other.str), size(other.size)
    25. {
    26. str = new char[size];
    27. str = new char[size+1];
    28. strcpy(str, other.str);
    29. }
    30. //析构函数
    31. ~myString()
    32. {
    33. delete []str; //释放成员指针的空间
    34. cout<<"Stu::析构函数:"<<this<
    35. }
    36. //拷贝赋值函数
    37. myString & operator=(const myString &other)
    38. {
    39. if(this != &other)
    40. {
    41. this->str = other.str;
    42. this->size = other.size;
    43. //判断原来指针空间释放被清空
    44. if(this->str != NULL)
    45. {
    46. delete this->str;
    47. }
    48. this->str = new char(*other.str);
    49. }
    50. cout<<"Stu:: 拷贝赋值函数"<
    51. //返回自身引用
    52. return *this;
    53. }
    54. //判空函数
    55. bool empty()const
    56. {
    57. if(size == 0)
    58. {
    59. return true;
    60. }
    61. return false;
    62. }
    63. //size函数
    64. int my_size()const
    65. {
    66. return size;
    67. }
    68. //c_str函数
    69. const char *c_str() const
    70. {
    71. return str;
    72. }
    73. //at函数
    74. char &at(int pos)
    75. {
    76. if (pos >= 0 && pos < size)
    77. {
    78. return str[pos];
    79. }
    80. }
    81. //加号运算符重载
    82. const myString operator+ (const myString &R)const
    83. {
    84. myString c;
    85. c.size = this->size + R.size;
    86. c.str = new char[c.size+1];
    87. strcpy(c.str, str);
    88. strcat(c.str, R.str);
    89. return c;
    90. }
    91. //加等于运算符重载
    92. const myString operator+= (const myString &other)
    93. {
    94. char *temp = new char[size + other.size + 1];
    95. strcpy(temp, str);
    96. strcat(temp, other.str);
    97. delete[] str;
    98. str = temp;
    99. size += other.size;
    100. return *this;
    101. }
    102. //关系运算符重载(>)
    103. bool operator> (const myString &R)const
    104. {
    105. return (strcmp(str, R.str) > 0);
    106. }
    107. //中括号运算符重载
    108. char &operator[](int pos)
    109. {
    110. return at(pos);
    111. }
    112. };
    113. int main()
    114. {
    115. myString s1("good");
    116. myString s2("day");
    117. myString s3 = s1 + s2;
    118. cout<c_str()<
    119. s1 += "morning";
    120. cout<c_str()<
    121. if(s1 >s2)
    122. {
    123. cout<c_str()<<"大于"<c_str()<
    124. }
    125. return 0;
    126. }

    运行结果:

    1. goodday
    2. Stu::析构函数:0x61fdf0
    3. Stu::析构函数:0x61fe00
    4. goodmorning
    5. goodmorning大于day
    6. Stu::析构函数:0x61fdc0
    7. Stu::析构函数:0x61fdd0
    8. Stu::析构函数:0x61fde0

    2、思维导图

  • 相关阅读:
    关于中台的一点思考
    koa中使用koa-body获取post请求中的参数
    Springboot+Easyexcel将数据写入模板文件并导出Excel
    3D模型格式转换工具HOOPS Exchange助力Halocline开发VR
    resultmap
    原码 反码 补码 移码
    【JavaWeb】 一文搞懂Request
    转发网关与NAT网关
    Java基础面试题
    python封装,继承,复写详解
  • 原文地址:https://blog.csdn.net/Lychee_z23/article/details/132817460